在 Pandas 数据框上进行分组,但将某些列排除在分组之外的最佳方法是什么? 例如,我有以下数据框:
代码 国家 Item_Code Item Ele_Code 单位 Y1961 Y1962 Y1963
2 阿富汗 15 小麦 5312 公顷 10 20 30
2 阿富汗 25 玉米 5312 公顷 10 20 30
4 安哥拉 15 小麦 7312 公顷 30 40 50
4 安哥拉 25 玉米 7312 公顷 30 40 50
我想按国家和项目代码列分组,只计算 Y1961、Y1962 和 Y1963 列下的行的总和。结果数据框应该是这样的:
代码 国家 项目代码 项目 Ele_Code 单位 Y1961 Y1962 Y1963
2 阿富汗 15 C3 5312 公顷 20 40 60
4 安哥拉 25 C4 7312 公顷 60 80 100
现在我正在这样做:
df.groupby('Country').sum()
但是,这样做也会累加 Item_Code 列中的值。我是否有办法指定在 sum()
操作中包含哪些列,以及排除哪些列?
agg
函数将为您完成这项工作。 以包含列、输出的 dict 形式传递列和函数:
df.groupby(['Country', 'Item_Code']).agg({'Y1961': np.sum, 'Y1962': [np.sum, np.mean]}) # Added example for two output columns from a single input column
这将只显示分组列和指定的聚合列。 在本例中,我将两个 agg 函数应用于 'Y1962'。
为了得到您希望看到的结果,请在分组中包含其他列,并对框架中的 Y 变量应用求和:
df.groupby(['Code', 'Country', 'Item_Code', 'Item', 'Ele_Code', 'Unit']).agg({'Y1961': np.sum, 'Y1962': np.sum, 'Y1963': np.sum})