Groupby 和 sum 行以聚合 PRODUCT 列的多个值
Groupby and sum rows to aggregate multiple values of PRODUCT column
我在pandas
中有一个这样的table
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 的那些行,而所有其他行保持不变,return 求和行使用新名称 PLY
谢谢!
您首先要对所有 PLYC
和 PLYN
产品进行分组并重置索引。然后,您使用 PLY
.
的新值创建 PRODUCT
列
现在,将这些分组结果连接到原始数据框中的数据(但不包括 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
请注意,结果中的任何差异应该只是由于导入上述数据集时列对齐不正确造成的。
我在pandas
中有一个这样的tablePERIOD 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 的那些行,而所有其他行保持不变,return 求和行使用新名称 PLY 谢谢!
您首先要对所有 PLYC
和 PLYN
产品进行分组并重置索引。然后,您使用 PLY
.
PRODUCT
列
现在,将这些分组结果连接到原始数据框中的数据(但不包括 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
请注意,结果中的任何差异应该只是由于导入上述数据集时列对齐不正确造成的。