我有一个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
任何帮助将不胜感激。...
答案 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)