繁体   English   中英

Pandas 中的 Groupby 列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM