来自重复行python3的列值总和

时间:2018-12-27 04:54:15

标签: sum duplicates row pandas-groupby

我有一个old.csv,例如:

Name,State,Brand,Model,Price
Adam,MO,Toyota,RV4,26500
Berry,KS,Toyota,Camry,18000
Berry,KS,Toyota,Camry,12000
Kavin,CA,Ford,F150,23000
Yuke,OR,Nissan,Murano,31000

,我需要这样的new.csv:

Name,State,Brand,Model,Price
Adam,MO,Toyota,RV4,26500
Berry,KS,Toyota,Camry,30000
Kavin,CA,Ford,F150,23000
Yuke,OR,Nissan,Murano,31000

如您所见,这两个区别是:

Berry,KS,Toyota,Camry,18000

贝里,堪萨斯州,丰田,凯美瑞,12000年

  merge to 

浆果,堪萨斯州,丰田,凯美瑞,30000

这是我的代码:

import pandas as pd
df=pd.read_csv('old.csv')
df1=df.sort_values('Name').groupby('Name','State','Brand','Model')
.agg({'Name':'first','Price':'sum'})
print(df1[['Name','State','Brand','Model','Price']])

它不起作用,我得到了这些错误:

  

文件“ ------ \ venv \ lib \ site-packages \ pandas \ core \ frame.py”,第4421行,在sort_values stacklevel = stacklevel中)     _get_label_or_level_values中的文件“ ------- \ venv \ lib \ site-packages \ pandas \ core \ generic.py”,行1382会引发KeyError(key)   KeyError:“名称”

我是python的新手,我在stackoverflow中找到了解决方案:

Sum values from Duplicated rows

上面的网站与我的网站有类似的问题,但这是一个sql代码, 不是Python

任何帮助将不胜感激。...

1 个答案:

答案 0 :(得分:0)

import pandas as pd
df = pd.read_csv('old.csv')

按4个字段('Name', 'State', 'Brand', 'Model')分组,然后选择Price列,然后对其应用汇总sum

df1 = df.groupby(['Name', 'State', 'Brand', 'Model'])['Price'].agg(['sum'])
print(df1)

这将为您提供所需的输出,

                                  sum
Name    State   Brand    Model  
Adam    MO     Toyota    RV4     26500
Berry   KS     Toyota    Camry   30000
Kavin   CA     Ford      F150    23000
Yuke    OR     Nissan    Murano  31000

注意:此sum中只有df1列。所有其他4个列都是索引,因此要将其转换为csv,我们首先需要将这4个索引列转换为dataframe列。

list(df1['sum'].index.get_level_values('Name'))将为您提供这样的输出,

['Adam', 'Berry', 'Kavin', 'Yuke']

现在,对于所有索引,执行此操作

df2 = pd.DataFrame()
cols = ['Name', 'State', 'Brand', 'Model']
for col in cols:
    df2[col] = list(df1['sum'].index.get_level_values(col))
df2['Price'] = df1['sum'].values

现在,只需将df2这样写入excel文件,

df2.to_csv('new.csv', index = False)