聚合具有相同日期和 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 groupby
和agg
函数来执行此操作。这是一些示例代码:
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)
我一直在尝试处理此数据集,其中包括不同日期不同县的两种销售类型 (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 groupby
和agg
函数来执行此操作。这是一些示例代码:
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)