在pandas中按11个多列分组



我有一个这样的数据框架:

COLUMN A     COLUMN B    COLUMN C    COLUMN D     VOLUME
2018-01-01    INFO A      INFO B       INFO C       1.2
2018-01-01    INFO A      INFO B       INFO C       2.3
2018-01-01    INFO D      INFO G       INFO H       1.5
2019-01-01    INFO E      INFO W       INFO R       1.8
2019-01-01    INFO E      INFO W       INFO R       1.5

我需要删除重复的值并求和VOLUME,我的输出需要像这样:

COLUMN A     COLUMN B    COLUMN C    COLUMN D     VOLUME
2018-01-01    INFO A      INFO B       INFO C       3.5
2018-01-01    INFO D      INFO G       INFO H       1.5
2019-01-01    INFO E      INFO W       INFO R       3.3

我已经试过了:

df['Volume(t)'] = df.groupby(['Month', 'Client', 'ClientName', 'DestinationCountry', 'Region', 'Client Group', 'Grade', 'Family', 'VIPE', 'Segment', 'Sub-segment'])['Volume(t)'].sum()

错误是:"TypeError:插入列的索引与框架索引不兼容。

请救救我。

这是一个通用的工作解决方案,对除要求和的列外的所有列进行分组。这将创建一个新的数据框架,而不是将其分配回原始列。

df.groupby(list(df.columns.difference(['VOLUME'])), as_index=False).sum()

输出:

COLUMN A COLUMN B COLUMN C COLUMN D  VOLUME
0  2018-01-01   INFO A   INFO B   INFO C     3.5
1  2018-01-01   INFO D   INFO G   INFO H     1.5
2  2019-01-01   INFO E   INFO W   INFO R     3.3

对于您提到的情况,下面是帮助获得所需输出的代码:

import pandas as pd
d={'COLUMN A':['2018-01-01','2018-01-01','2018-01-01','2019-01-01','2019-01-01'],
'COLUMN B':['INFO A','INFO A','INFO D','INFO E','INFO E'] ,
'COLUMN C': ['INFO B','INFO B','INFO G','INFO w','INFO w'] ,
'COLUMN D':['INFO C','INFO C','INFO H','INFO R', 'INFO R'],
'VOLUME':[1.2,2.3,1.5,1.8,1.5]}
df= pd.DataFrame(d)
df.drop_duplicates(inplace=True) # to delet the duplicate lines
df.groupby(['COLUMN A','COLUMN B','COLUMN C','COLUMN D'])['VOLUME'].sum()

输出:

COLUMN A    COLUMN B  COLUMN C  COLUMN D
2018-01-01  INFO A    INFO B    INFO C      3.5
INFO D    INFO G    INFO H      1.5
2019-01-01  INFO E    INFO w    INFO R      3.3
Name: VOLUME, dtype: float64

相关内容

  • 没有找到相关文章

最新更新