Python df.groupby一列,在另一列中计算值
我有一个这种格式的数据帧(在Python df.groupby一列,在另一列中计算值,python,pandas,Python,Pandas,我有一个这种格式的数据帧(在col2中有更多的行和数百个不同的值): 我知道我可以将col2中的所有动物条目与 grouped = dftest.groupby('col2') 我想使用groupeddf来计算col1中的颜色组合,按col2中的值分组 例如,cat和bird分组在col1中都有black/black,因此black/black=2。只有蛇有红/绿,所以红/绿=1。期望输出: black/black = 2 black/brown = 1 green/red = 1 您可以按
col2
中有更多的行和数百个不同的值):
我知道我可以将col2
中的所有动物条目与
grouped = dftest.groupby('col2')
我想使用grouped
df来计算col1
中的颜色组合,按col2
中的值分组
例如,cat
和bird
分组在col1
中都有black/black
,因此black/black=2
。只有蛇有红/绿,所以红/绿=1。期望输出:
black/black = 2
black/brown = 1
green/red = 1
您可以按
'col2'
分组,并使用'/'.join(排序(x))
获得可能的颜色组合。'/'.join(sorted(x))
将获取组中的所有值,并将它们合并为一个字符串。因此,如果'black'
和'white'
在一个组中,它将把它们连接到字符串'black/white'
。另外,我对值进行排序,这样就不可能在一个组中获得'black/white'
,在另一个组中获得'white/black'
。此lambda函数应用于每个组。然后使用计数器
在字典中存储计数
from collections import Counter
Counter(dftest.groupby('col2')['col1'].apply(lambda x: '/'.join(sorted(x))))
输出:
{'black/black': 2, 'black/brown': 1, 'green/red': 1}
black/black 2
green/red 1
black/brown 1
或者,您也可以使用值\u计数
而不是使用计数器
。它将输出一系列:
dftest.groupby('col2')['col1'].apply(lambda x: '/'.join(sorted(x))).value_counts()
输出:
{'black/black': 2, 'black/brown': 1, 'green/red': 1}
black/black 2
green/red 1
black/brown 1
您的示例中没有红色。哎呀!修复了它,谢谢。这是有效的,但是你能不能加入一些关于
lambda x:'/'的更多信息。join(sorted(x))
部分?我想对正在发生的事情有一个更好的分解,以便我可以在其他地方应用它。:)我对lambda x:'/'添加了更多的解释。join(sorted(x)),希望有意义。