Pandas中使用groupby()分组时如何保留col列且不改变其值?
问题与解决方案
数据集示例
| country_o | regime_o | country_d | regime_d | trade_o | trade_d | col |
|---|---|---|---|---|---|---|
| Italy | 1 | Turkey | 0 | 1231231 | 4929394 | 0 |
现有代码
gravity3 = gravity2.groupby(["country_d", "year", "regime_o"]).agg({"tradeflow_imf_d":"sum"})
需求
在分组结果中保留col列,且对于给定的year和country_d,该列返回单一值,不改变原有数值。
修改后的代码
可以在agg方法中为col指定一个能返回单一值的聚合函数(比如first、last,只要分组内col值唯一,这些函数都能保留原数值):
# 字典格式写法 gravity3 = gravity2.groupby(["country_d", "year", "regime_o"]).agg({ "tradeflow_imf_d": "sum", "col": "first" }) # 命名聚合写法(可读性更强) gravity3 = gravity2.groupby(["country_d", "year", "regime_o"]).agg( total_trade=("tradeflow_imf_d", "sum"), col=("col", "first") )
说明
因为要求col在指定year和country_d时返回单一值,只要确保每个分组内的col值是唯一的,使用first()、last()、max()或min()这类聚合函数都可以,它们不会改变col的原有数值,只是提取分组内的唯一值。
内容的提问来源于stack exchange,提问作者user19562955
相关产品推荐
相关产品推荐

