Python pandas groupby:使用元组索引聚合列表
这个问题与所问的问题类似,但有一个元组索引。 对列表列进行分组可以很好地用于单个索引:Python pandas groupby:使用元组索引聚合列表,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,这个问题与所问的问题类似,但有一个元组索引。 对列表列进行分组可以很好地用于单个索引: mydata=[{'idx':'A','list_str':['hi','babe']}, {'idx':'A','list_str':['TACK','A','walk']}, {'idx':'A','list_str':[]}, {'idx':'B','list_str':['on','the','wild','side']}] df=pd.DataFrame(mydata) grouped=df.gro
mydata=[{'idx':'A','list_str':['hi','babe']},
{'idx':'A','list_str':['TACK','A','walk']},
{'idx':'A','list_str':[]},
{'idx':'B','list_str':['on','the','wild','side']}]
df=pd.DataFrame(mydata)
grouped=df.groupby('idx')
打印(grouped.agg({'list_str':lambda x:tuple(x)}))
根据预期产出:
idx list_str
A [hi, babe, take, a, walk]
B [on, the, wild, side]
但是,添加第二个索引不再有效:
mydata=[{'idx':'A','idx2':'B','list_str':['hi','babe']},
{'idx':'A','idx2':'B','list_str':['TACK','A','walk']},
{'idx':'A','idx2':'B','list_str':[]},
{'idx':'B','idx2':'C','list_str':['on','the','wild','side']}]
df=pd.DataFrame(mydata)
grouped=df.groupby(('idx','idx2'))
打印(grouped.agg({'list_str':sum}))
给出一个值错误
,函数不减少
正确的方法是什么?要按多列分组,请使用列表:
grouped = df.groupby(['idx', 'idx2'])
print(grouped.agg({'list_str': sum}))
可能你以为你在做:
df['new_index'] = df.apply(lambda row: (row['idx'],row['idx2']), axis=1)
df.set_index('new_index',inplace=True)
grouped = df.groupby(df.index)
print(grouped.agg({'list_str': sum}))
你试过密码了吗?这实际上给出了相同的错误。我确实尝试过,使用了您提供的输入。您是否在groupby调用中使用了列表
[]
而不是元组()
?或者您的输入数据是否构造错误,因为它有两个单独的索引而不是元组的单个索引?使用相同的“mydata”变量,并且df=pd.DataFrame(mydata);分组=df.groupby(['idx','idx2']);print(grouped.agg({'list_str':sum}))
使用pandas版本0.19.2给出了相同的错误。