2017-06-23 72 views
0

该问题类似于一个询问here,但带有元组索引。 分组列表的列单指数正常工作:pandas groupby:使用元组索引来聚合列表

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)})) 

随着预期输出:

​​

然而,添加第二个指标不再起作用:

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})) 

给出a ValueErrorFunction does not reduce

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

回答

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})) 
+0

您是否尝试过的代码?这实际上给出了相同的确切的错误。 – nbubis

+0

我确实尝试过,使用您提供的输入。您是否在groupby调用中使用了列表'[]'而不是元组'()'?或者,您的输入数据是错误构建的,因为它有两个单独的索引,而不是单个索引的元组? – jack6e

+0

使用相同的'mydata'变量,和'df = pd.DataFrame(mydata); grouped = df.groupby(['idx','idx2']); print(grouped.agg({'list_str':sum}))'使用熊猫版本0.19.2给出同样的错误。 – nbubis

相关问题