大佬教程收集整理的这篇文章主要介绍了groupby pandas 在每条记录上都有一个列表?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个由 3 列组成的数据框
df =pd.DataFrame({
"source_number":[11199,123244,11287,32345,12342,1232,13456],"name":["roky anderson ","james jacob","suzan kor","jenny mayor","joseph owin","joe kabush","georges mathiu","kobby lon","adam wein"],"category":["cat1","cat2","cat1","cat3","cat2"],})
我想对类别和源编号
执行分组依据功能结果:
source_number category name
1232 cat3 {joe kabush}
11199 cat1 {roky anderson}
11287 cat2 {suzan cor - georges mathius}
12342 cat1 {joseph owin}
13456 cat3 {adam wein}
32345 cat3 {jenny mayor}
123244 cat2 {james jacob - kobby lon}
我想要的是将包含超过 1 个值的 name 值拆分为新列或新行。
预期输出:
source_number category name name2
1232 cat3 {joe kabush} nan
11199 cat1 {roky anderson} nan
11287 cat2 {suzan cor } {georges mathius}
12342 cat1 {joseph owin} nan
13456 cat3 {adam wein} nan
32345 cat3 {jenny mayor} nan
123244 cat2 {james jacob} {kobby lon}
import pandas as pd
my_Dict{
"source_number":[11199,}
df = pd.DataFrame(my_Dict)
df_group = df.groupby(["source_number","category"])["name"].apply(lambda x: "{%s}" %' - '.join(X)).to_frame()
updatED ANSWER
:
df1 = df.groupby(["source_number"],as_index=falsE).agg({'name' : list,'category' : 'last'})
result = pd.concat([df1[['source_number','category']],pd.concat([df1['name'].apply(pd.Series).add_prefix('name' + "_")],axis=1)],axis = 1)
result = result.filter(like='name').applymap(lambda x:"{%s}" %X)
NOTE:
如果需要,稍后格式化名称列。
你得到的结果存储在一个变量 df_group
中然后(如果它是你的初始数据帧):
尝试使用 split()
:
df_group['name2']='{'+df_group['name'].str.split('-',expand=TruE)[1].str.rStrip('}')+'}'
df_group['name']='{'+df_group['name'].str.split('-',expand=TruE)[0].str.Strip('{}')+'}'
现在如果你打印 df_group
你会得到你想要的输出:
source_number category name name2
1232 cat3 {joe kabush} nan
11199 cat1 {roky anderson} nan
11287 cat2 {suzan cor } {georges mathius}
12342 cat1 {joseph owin} nan
13456 cat3 {adam wein} nan
32345 cat3 {jenny mayor} nan
123244 cat2 {james jacob} {kobby lon}
尝试使用 split()
和 apply()
方法:
result=df_group['name'].str.split('-',expand=TruE)
result=result.apply(lambda x:'{'+x.str.Strip('{}')+'}',1)
df_group[['name'+str(x+1) for x in result.columns]]=result
现在如果你打印 df_group
你会得到你想要的输出
以上是大佬教程为你收集整理的groupby pandas 在每条记录上都有一个列表?全部内容,希望文章能够帮你解决groupby pandas 在每条记录上都有一个列表?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。