我在pandas中有这样的表
PERIOD REGION2 REGION PRODUCT Production NSLOG CHIPS SSAW
2010 FRANC cw_eu PLYC 100 10 5
2010 FRANC cw_eu PLYN 230 30
2011 FINLA n_eu PLYC 800 1
2011 FINLA n_eu PLYN 200 4
2011 FRANC cw_eu PLYC 100 3
2011 FRANC cw_eu PLYN 200 7 2
2010 AUSTR cw_eu CWC 248 57.04 78.78
2010 AUSTR cw_eu CWF 1017 58.11
2010 AUSTR cw_eu DissP 282 93.6 1056
我希望实现这样的目标:
PERIOD REGION2 REGION PRODUCT Production NSLOG CHIPS SSAW
2010 FRANC cw_eu PLY 330 10 35
2011 FINLA n_eu PLY 1000 1 4
2011 FRANC cw_eu PLY 300 10 2
2010 AUSTR cw_eu CWC 248 57.04 78.78
2010 AUSTR cw_eu CWF 1017 58.11
2010 AUSTR cw_eu DissP 282 93.6 1056
,即我的目标是对行,PERIOD,REGION2,REGION,PRODUCT进行分组和求和,但仅适用于PRODUCT等于PLYC或PLYN且其他所有行保持不变的行,并返回带有新名称PLY的求和行 谢谢!
答案 0 :(得分:1)
您首先要对所有PLYC
和PLYN
产品进行分组并重置索引。然后,您使用新值PRODUCT
创建PLY
列。
现在,将这些分组结果连接到原始数据框中的数据(但不包括PLYC
和PLYN
产品)。然后在您想要的字段上设置索引,您就可以了。
grouped_products = ['PLYC', 'PLYN']
gb = (df[df.PRODUCT.isin(grouped_products)]
.groupby(['PERIOD', 'REGION2', 'REGION'])
.sum()
.reset_index())
gb['PRODUCT'] = 'PLY'
result = pd.concat([gb, df.loc[~df.PRODUCT.isin(grouped_products), :]], ignore_index=True)
result.set_index(['PERIOD', 'REGION2', 'REGION', 'PRODUCT'], inplace=True)
>>> result.loc[:, ['Production', 'NSLOG', 'CHIPS', 'SSAW']]
Production NSLOG CHIPS SSAW
PERIOD REGION2 REGION PRODUCT
2010 FRANC cw_eu NaN 330 10.00 35.00 NaN
2011 FINLA n_eu NaN 1000 1.00 4.00 NaN
FRANC cw_eu NaN 300 10.00 2.00 NaN
2010 AUSTR cw_eu CWC 248 57.04 78.78 NaN
CWF 1017 NaN NaN 58.11
DissP 282 93.60 NaN 1056.00
请注意,结果的任何差异都应该归因于导入上面的数据集时不正确的列对齐。