啊啊啊啊啊吖

2019-01-24   阅读量: 1756

数据分析师 Python数据分析

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

扫码加入数据分析学习群

我有一个这种格式的数据框(有更多的行,数百个不同的值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')

我想用groupeddf计算颜色col1组合,按照值中的值分组col2。

例如,无论是cat和bird分组具有black/black的col1,所以black/black = 2。只有蛇有red/green,所以red/green = 1。期望的输出:

black/black = 2

black/brown = 1

green/red = 1

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
18.2455 1 3 关注作者 收藏

评论(1)

啊啊啊啊啊吖
2019-01-24

可以分组'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

0.0000 0 0 回复

推荐课程