【发布时间】:2018-04-10 19:42:12
【问题描述】:
我有一个格式如下的数据框:
import pandas as pd
d1 = {'ID': ['A','A','A','B','B','B','B','B','C'],
'Time':
['1/18/2016','2/17/2016','2/16/2016','1/15/2016','2/14/2016','2/13/2016',
'1/12/2016','2/9/2016','1/11/2016'],
'Product_ID': ['2','1','1','1','1','2','1','2','2'],
'Var_1': [0.11,0.22,0.09,0.07,0.4,0.51,0.36,0.54,0.19],
'Var_2': [1,0,1,0,1,0,1,0,1],
'Var_3': ['1','1','1','1','0','1','1','0','0']}
df1 = pd.DataFrame(d1)
df1 的格式为:
ID Time Product_ID Var_1 Var_2 Var_3
A 1/18/2016 2 0.11 1 1
A 2/17/2016 1 0.22 0 1
A 2/16/2016 1 0.09 1 1
B 1/15/2016 1 0.07 0 1
B 2/14/2016 1 0.4 1 0
B 2/13/2016 2 0.51 0 1
B 1/12/2016 1 0.36 1 1
B 2/9/2016 2 0.54 0 0
C 1/11/2016 2 0.19 1 0
时间采用“MM/DD/YY”格式。
这是我必须做的:
1)我想做的是按时间(特别是每个月)对 ID 和产品 ID 进行分组。
2)我想然后进行以下列操作。
a) 首先,我想求 Var_2 和 Var_3 的列和
b) 求 Var_1 列的平均值。
3)然后,我想为每个月创建每个 ID 和 Product_ID 的计数列。
4) 最后,我还想输入没有条目的项目 ID 和产品 ID。
例如,对于时间 = 2016-1(2016 年 1 月)的 ID = A 和产品 ID = 1,没有观察值,因此所有变量的值都为 0。
同样,对于 ID = A 和产品 ID = 1,时间 = 2016-2(2016 年 1 月),
Var_1 = (.22+.09)/2 = 0.155
Var_2 = 1,
Var_3 = 1+1=2
最后是 Count = 2。
这是我想要的输出。
ID Product_ID Time Var_1 Var_2 Var_3 Count
A 1 2016-1 0 0 0 0
A 1 2016-2 0.155 1 2 2
B 1 2016-1 0.215 1 1 2
B 1 2016-2 1 0.4 0 1
C 1 2016-1 0 0 0 0
C 1 2016-2 0 0 0 0
A 2 2016-1 0.11 1 1 1
A 2 2016-2 0 0 0 0
B 2 2016-1 0 0 0 0
B 2 2016-2 0.455 1 2 2
C 2 2016-1 0.19 1 0 1
C 2 2016-2 0 0 0 0
这比我的编程能力略强(我知道 groupby 函数退出,但我不知道如何合并其余的更改)。如果您有任何问题,请告诉我。
任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: python python-2.7 pandas grouping data-cleaning