Как я могу сгруппировать и суммировать несколько столбцов в файле CSV? - PullRequest
3 голосов
/ 17 февраля 2020

Я все еще новичок в python и pandas и в настоящее время пытаюсь получить сумму нескольких столбцов в файле CSV.

У меня есть CSV-файл со столбцами, которые я хочу суммировать unitCount, orderCount, invoiceCount:

     date       id   name   unitCount   orderCount   invoiceCount
 2020-02-12     1   Guitar     200          100           200
 2020-02-12     2   Drums      300          200           100
 2020-02-12     3   Piano      400          700           300
 2020-02-11     1   Guitar     100          500           300
 2020-02-11     2   Drums      200          400           400
 2020-02-11     3   Piano      300          300           100

Мой желаемый вывод будет CSV-файл с суммой эти последние 3 столбца (сгруппированные по ID) и связанные только с самой последней датой:

     date       id   name   total_unitCount   total_orderCount   total_invoiceCount
 2020-02-12     1   Guitar        300              600                   500
 2020-02-12     2   Drums         500              600                   500
 2020-02-12     3   Piano         700              1000                  400

Может ли кто-нибудь помочь?

До сих пор я пробовал нижеследующее, но у меня это не работает. Можно ли добавить groupby в первую строку кода ниже? Или я начал совершенно неправильно? Спасибо!

df = pd.read_csv(r'path/to/myfile.csv', sep=';').sum()
df.to_csv(r'path/to/myfile_sum.csv')

Ответы [ 3 ]

2 голосов
/ 17 февраля 2020

Вы можете сделать с несколько ручной agg:

(df.groupby('id', as_index=False)
   .agg({'date':'max', 'name':'first',
         'unitCount':'sum',
         'orderCount':'sum',
         'invoiceCount':'sum'})
   .to_csv('file.csv')
)
1 голос
/ 17 февраля 2020

Вы можете сделать следующее

# group rows by 'id' column
df.groupby('id', as_index=False).agg({'date':'max',
                                      'name':'first',
                                      'unitCount':'sum',
                                      'orderCount':'sum',
                                      'invoiceCount':'sum'}

# change the order of the columns
df = df[['date', 'id', 'name', 'unitCount', 'orderCount'  ,'invoiceCount']]

# set the new column names
df.columns=['date', 'id', 'name', 'total_unitCount', 'total_orderCount'  ,'total_invoiceCount']

# save the dataframe as .csv file
df.to_csv('path/to/myfile_sum.csv')
0 голосов
/ 17 февраля 2020

Вам просто нужно вызвать sum() для объекта groupby, затем соответствующим образом переименовать имена столбцов и, наконец, записать полученный кадр данных в файл csv.


Следующее должно сделать трюк:

df = pd.read_csv(r'path/to/myfile.csv', sep=';')

df.groupby(['id', 'name'])['unitCount', 'orderCount', 'invoiceCount'] \
  .sum() \
  .rename(columns={'unitCount':'total_unitCount', 'orderCount' : 'total_orderCount', 'invoiceCount': 'total_invoiceCount'}) \
  .to_csv('path/to/myoutputfile_sum.csv', sep=';')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...