pandas groupby:使用元组索引聚合列表

时间:2017-06-23 14:37:40

标签: python pandas pandas-groupby

这个问题类似于here提问,但有一个元组索引。 对一列列表进行分组适用于单个索引:

mydata = [{'idx': 'A', 'list_str': ['hi', 'babe']},
          {'idx': 'A', 'list_str': ['take', 'a', 'walk']},
          {'idx': 'A', 'list_str': []},
          {'idx': 'B', 'list_str': ['on', 'the', 'wild', 'side']}]


df = pd.DataFrame(mydata)
grouped = df.groupby('idx') 
print(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': ['take', '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'))
print(grouped.agg({'list_str': sum}))

提供ValueErrorFunction does not reduce

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

要按多列分组,请使用列表:

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}))
相关问题