Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python df.groupby一列,在另一列中计算值_Python_Pandas - Fatal编程技术网

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)),希望有意义。