[英]Groupby lists in Pandas
我有一个 dataframe:
df = pd.DataFrame({'col0':[[0,1],[1,0,0],[1,0],[1,0],[2,0]],
'col1':[5,4,3,2,1]})
IE:
col0 col1
0 [0, 1] 5
1 [1, 0, 0] 4
2 [1, 0] 3
3 [1, 0] 2
4 [2, 0] 1
我想按col0
中的值分组,并对同一组中的col1
值求和。 我愿意:
df.groupby('col0').col1.sum()
但这给出了TypeError: unhashable type: 'list'
。 然后我这样做:
df.groupby(df.col0.apply(frozenset)).col1.sum()
这使:
col0
(0, 1) 14
(0, 2) 1
Name: col1, dtype: int64
即列表被转换为集合(准确地说是frozenset
),然后被分组。 元素的数量和它们的顺序无关紧要(即[1,0]
和[0,1]
属于同一组, [1,0]
和[1,0,0]
也是如此)
如果元素的顺序和数量也很重要,那么我该如何分组呢?
所需的 output 的 groupbying col0
和上面 dataframe 的col1
相加:
col0
[0, 1] 5
[1,0,0] 4
[1, 0] 5
[2,0] 1
Name: col1, dtype: int64
tuple
是不可变的,可以包含重复项并保持顺序。
df['col0'] = df['col0'].apply(tuple)
df.groupby('col0', sort=False).sum() # sort=False for original order of col0
# col1
# col0
# (0, 1) 5
# (1, 0, 0) 4
# (1, 0) 5
# (2, 0) 1
您可以转换为字符串仅用于分组:
import pandas as pd
df = pd.DataFrame({'col0':[[0,1],[1,0,0],[1,0],[1,0],[2,0]],
'col1':[5,4,3,2,1]})
df.groupby(df['col0'].astype(str)).sum()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.