聚合具有相同日期和 ID 但类型不同的面板数据中的两个值

Aggregating two values in a panel data with the same date and id but different type

我一直在尝试处理此数据集,其中包括不同日期不同县的两种销售类型 (0,1) 的数量。但是,某些日期同时包括类型 1 和类型 0 销售。如何合并相同日期和相同 ID 的类型 1 和类型 0 销售?数据集有超过 40k 行,我不知道从哪里开始。我正在考虑创建一个 if 循环,但我不知道如何编写它。它可以在 python 或 R.

基本上,我有一个 table 看起来像这样:

Date City Type Quantity
2020-01-01 Rio 1 10
2020-01-01 Rio 0 16
2020-03-01 Rio 0 23
2020-03-01 Rio 1 27
2020-05-01 Rio 1 29
2020-08-01 Rio 0 36
2020-01-01 Sao Paulo 0 50
2020-01-01 Sao Paulo 1 62
2020-03-01 Sao Paulo 0 30
2020-04-01 Sao Paulo 1 32
2020-05-01 Sao Paulo 0 65
2020-05-01 Sao Paulo 1 155

例如,我想合并 2020 年 1 月 1 日以及 2020 年 3 月 1 日里约的类型 1 和 0 的数量,以及圣保罗和所有后续县的相同数量。我想聚合类型 1 和 0 的数量,但仍保留日期和城市列。

尝试这样的事情:

import pandas as pd

df = pd.read_csv('your_file_name.csv')
df.pivot_table(values='Sales', index=['Date', 'City'], aggfunc='sum')

您可以使用pandas groupbyagg 函数来执行此操作。这是一些示例代码:

import pandas as pd 
df = pd.DataFrame({'date': ['3/10/2000', '3/11/2000', '3/12/2000', '3/10/2000'],
                    'id':[0,1,0,0], 'sale_type':[0,0,0,1], 'amount': [2, 3, 4, 2]})
df['date'] = pd.to_datetime(df['date'])
df.groupby(['date', 'id']).agg({'amount':sum})
>>> amount
date       id        
2000-03-10 0        4
2000-03-11 1        3
2000-03-12 0        4

我的代码版本:

# -*- coding: utf-8 -*-
import pandas as pd

# generating a sample dataframe
df = pd.DataFrame([['10-01-2020', 311100, 'ABADIA', 'MG', 'MINAS', 'IVERMECTIONA', 0, 68],
                  ['10-01-2020', 311100, 'ABADIA', 'MG', 'MINAS', 'IVERMECTIONA', 1, 120]],
                  columns=['date', 'code1', 'code2', 'code3', 'code4', 'code5', 'type_of_sales', 'count_sales'])

# printing content of dataframe
print(df)

# using group by operation over columns we want to see in resultset and aggregating additive columns
df = df.groupby(['date', 'code1', 'code2', 'code3', 'code4', 'code5']).agg({'count_sales': ['sum']})

# aligning levels of column headers
df = df.droplevel(axis=1, level=0).reset_index()

# renaming column name to previous after aggregating
df = df.rename(columns={'sum':'count_sales'})

print(df)