繁体   English   中英

df.groupby一列,计数另一列中的值

[英]df.groupby one column, count values in another column

我有一个这种格式的数据框(具有更多的行, col2数百个不同的值):

dftest = pd.DataFrame(
    {'col1': ['black', 'black', 'brown', 'black', 'green', 'red', 'black', 'black'],
     'col2': ['cat', 'cat', 'dog', 'dog', 'snake', 'snake', 'bird', 'bird']})

我知道我可以将col2所有动物条目与

grouped = dftest.groupby('col2')

我想使用grouped df来计算col1中颜色的组合,并按col2的值分组。

例如, catbird分组在col1都具有black/black ,因此black/black = 2 只有蛇具有red/green ,因此red/green = 1 所需的输出:

black/black = 2
black/brown = 1
green/red = 1

您按'col2'分组,并使用'/'.join(sorted(x))获得可能的颜色组合。 '/'.join(sorted(x))将所有值放在一个组中,并将它们连接在一起成为一个字符串。 因此,如果'black''white'在一个组中,它将把它们连接在一起成为字符串'black/white' 另外,我对值进行排序,这样就不可能在一个组中获得'black/white' ,而在另一组中获得'white/black' 此lambda函数适用于每个组。 然后使用Counter将计数存储在字典中。

from collections import Counter

Counter(dftest.groupby('col2')['col1'].apply(lambda x: '/'.join(sorted(x))))

输出:

{'black/black': 2, 'black/brown': 1, 'green/red': 1}

或者,您可以使用value_counts而不是使用Counter 它将输出一系列:

dftest.groupby('col2')['col1'].apply(lambda x: '/'.join(sorted(x))).value_counts()

输出:

black/black    2
green/red      1
black/brown    1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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