Суммировать значения столбцов из повторяющихся строк python3 - PullRequest
0 голосов
/ 27 декабря 2018

У меня 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

, и мне нужен новый .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

Как вы можете видеть разницу между этими двумя:

Берри, KS, Toyota, Camry, 18000

Ягода, KS, Toyota, Camry, 12000

  merge to 

Ягода, KS, Toyota, Camry, 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']])

, и он не работает, и я получил эти ошибки:

File "------ \venv \ lib \ site-packages \ pandas \ core \ frame.py ", строка 4421, в sort_values ​​stacklevel = stacklevel) Файл" ------- \ venv \ lib \ site-packages \ pandas \ core \ generic.py ", строка 1382, в _get_label_or_level_values ​​поднять KeyError (key) KeyError: 'Name'

Я совершенно новый Python, и я нашел решения в stackoverflow:

Суммарные значения из дублированных строк

На сайте выше есть такой же вопрос, как у меня, но это SQL-код, а не Python

Любая помощь будет большой благодарностью ....

1 Ответ

0 голосов
/ 27 декабря 2018
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

Примечание: в этом df1 есть только столбец sum.Все остальные 4 столбца являются индексами, поэтому, чтобы преобразовать его в csv, сначала нужно преобразовать эти 4 столбца индекса в столбцы данных.

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)
...