我有一个这样的数据框架:
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