【问题标题】:Pandas group by timestamp and id and countPandas 按时间戳、id 和计数分组
【发布时间】: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


    【解决方案1】:

    我分解了这些步骤。

    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
    

    【讨论】:

    • 非常感谢。
    • @Prometheus Yw~ :-)
    • 嗨,温,我刚刚意识到输出实际上并没有复制我想要的结果。具体来说,代码在没有观察到的情况下没有及时填写 ID 和产品行。例如,我没有得到输出的第 1 行(在你的答案中)。你知道为什么会这样吗?为我显示的输出从输出的第 2 行开始,其中 A 的 Var1 值为 0.155。
    • @Prometheus 抱歉,我错过了粘贴一行,已编辑
    猜你喜欢
    • 2020-04-20
    • 2018-09-04
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    相关资源
    最近更新 更多