Python数据框groupby,然后根据组中的值计算位置

Posted

技术标签:

【中文标题】Python数据框groupby,然后根据组中的值计算位置【英文标题】:Python dataframe groupby, then count where based on values in group 【发布时间】:2021-12-11 23:01:18 【问题描述】:

编辑包括国家: 我有一个看起来像这样的 Python 数据框:

Indicator Value Country
A 20 x
A 20 x
A 30 x
B 10 x
B 30 y
B 20 z

data = ([ "指标": "A", "国家": "x", "值": 20 , "指标": "A", "国家": "x","值": 20 , "指标": "A","国家": "x", "值": 30 , “指标”:“B”,“国家”:“x”,“价值”:10 ,“指标”:“B”,“国家”:“y”,“价值”:30 ,“指标”:“B”,“国家”:“y”,“值”:20 ])

然后我想做一个 groupby 指标,并创建一个新列来计算每组的值: 计算指标国家组中值

Indicator Value Country Rank
A 20 x 3
A 20 x 3
A 30 x 1
B 10 x 1
B 30 y 1
B 20 y 2

我尝试了排名,添加了支持列来进行计算,但实际上不知道如何继续。

【问题讨论】:

请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

您可以使用apply 将值与数据帧的一部分进行比较:

import pandas as pd

data = [  "Indicator": "A", "Value": 20 ,  "Indicator": "A", "Value": 20 ,  "Indicator": "A", "Value": 30 ,  "Indicator": "B", "Value": 10 ,  "Indicator": "B", "Value": 30 ,  "Indicator": "B", "Value": 20  ]
df = pd.DataFrame(data)
df['Rank'] = df.apply(lambda x: (df[df['Indicator'] == x['Indicator']]['Value'] >= x['Value']).sum(), axis=1)

结果:

Indicator Value Rank
0 A 20 3
1 A 20 3
2 A 30 1
3 B 10 3
4 B 30 1
5 B 20 2

【讨论】:

以上是关于Python数据框groupby,然后根据组中的值计算位置的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 根据数据框 groupBy 制作多个文件

熊猫如何根据条件在groupby中划分行列

忽略熊猫 groupby 组中的 NaN 的标准错误

Python、pandas 数据框、groupby 列和预先知道的值

Python Pandas DF Pivot 和 Groupby

python 用groupby之后生成新的数据框