首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大熊猫按时间戳、身份和数量分组

大熊猫按时间戳、身份和数量分组
EN

Stack Overflow用户
提问于 2017-10-29 20:26:33
回答 1查看 2.4K关注 0票数 4

我有以下格式的数据:

代码语言:javascript
复制
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的形式如下:

代码语言:javascript
复制
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)然后执行以下列操作。

代码语言:javascript
复制
 a) First, I would like to find the sum of the columns of Var\_2 and Var\_3 and 
代码语言:javascript
复制
b) find the mean of the column Var\_1. 

3)然后,我想为每个月创建一个每个ID和Product_ID的计数列。

4)最后,我还想输入没有条目的项ID和产品ID。

例如,对于ID =A和Product =1 in Time = 2016-1 (2016年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

最后计数= 2。

这是我想要的输出。

代码语言:javascript
复制
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函数退出,但我不知道如何合并其余的更改)。如果你有问题请告诉我。

任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-29 22:01:02

我把台阶拆开了。

代码语言:javascript
复制
df1.Time=pd.to_datetime(df1.Time)
df1.Time=df1.Time.dt.month+df1.Time.dt.year*100
df1['Var_3']=df1['Var_3'].astype(int)

output=df1.groupby(['ID','Product_ID','Time']).agg({'Var_1':'mean','Var_2':'sum','Var_3':'sum'})
output=output.unstack(2).stack(dropna=False).fillna(0)# missing one .


output['Count']=output.max(1)
output.reset_index().sort_values(['Product_ID','ID'])


Out[1032]: 
  ID Product_ID    Time  Var_3  Var_2  Var_1  Count
0  A          1  201601    0.0    0.0  0.000    0.0
1  A          1  201602    2.0    1.0  0.155    2.0
4  B          1  201601    2.0    1.0  0.215    2.0
5  B          1  201602    0.0    1.0  0.400    1.0
2  A          2  201601    1.0    1.0  0.110    1.0
3  A          2  201602    0.0    0.0  0.000    0.0
6  B          2  201601    0.0    0.0  0.000    0.0
7  B          2  201602    1.0    0.0  0.525    1.0
8  C          2  201601    0.0    1.0  0.190    1.0
9  C          2  201602    0.0    0.0  0.000    0.0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47004887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档