【问题标题】:Python dataframe groupby, then count where based on values in groupPython数据框groupby,然后根据组中的值计算位置
【发布时间】: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

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

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python group-by count conditional-statements


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 2021-07-12
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    相关资源
    最近更新 更多