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








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