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,然后根据组中的值计算位置的主要内容,如果未能解决你的问题,请参考以下文章
Python、pandas 数据框、groupby 列和预先知道的值