我有以下数据集
df =
value pattern
3 [1,0,0]
4 [1,0,0]
2 [1,0,1]
3 [1,0,1]
5 [1,0,1]
中变量模式是一个列表,我们可以看到。我想对每个列表的值进行汇总和求和:
df_output =
value pattern
7 [1,0,0]
10 [1,0,1]
我试了如下:
df_output = df.reset_index().groupby('pattern').count()
,但我得到以下错误:
TypeError: unhashable type: 'list'
任何想法如何使用groupby()与列表的组合?
将值转换为元组,然后返回到rename
中的列表:
df_output = df.groupby(df['pattern'].apply(tuple)).sum().rename(list).reset_index()
print (df_output)
pattern value
0 [1, 0, 0] 7
1 [1, 0, 1] 10
另一种想法是通过sum
和GroupBy.first
的元组进行聚合:
df_output = (df.groupby(df['pattern'].apply(tuple))
.agg({'value':'sum', 'pattern':'first'})
.reset_index(drop=True))
print (df_output)
value pattern
0 7 [1, 0, 0]
1 10 [1, 0, 1]