【问题标题】:Pandas Average If in Python : Combining groupby mean with conditional statementPython中的Pandas Average If:将groupby均值与条件语句相结合
【发布时间】:2018-09-01 07:37:32
【问题描述】:

我浏览了论坛,似乎无法弄清楚这一点。我有以下数据。我认为答案在于“groupby”功能,但我似乎无法解决。

Date     Hour    Value   3DAverage
1/1       1       57      53.33
1/1       2       43      42.33
1/1       3       44      45.33
1/2       1       51      ...
1/2       2       40      ...
1/2       3       42      ...
1/3       1       56      ...
1/3       2       42
1/3       3       48
1/4       1       53
1/4       2       45
1/4       3       46
1/5       1       56
1/5       2       46
1/5       3       48
1/5       4       64 *       
1/6       1       50
1/6       2       41
1/6       3       42
1/7       1       57
1/7       2       43
1/7       3       45
1/8       1       58
1/8       2       49
1/8       3       41
1/9       1       53
1/9       2       46
1/9       3       47
1/10      1       58
1/10      2       49
1/10      3       40

我想要做的是添加“3DAverage”列。我希望此列生成 PRIOR 3 相应小时值的“值”列的平均值。 我想为整个系列填写此栏。例如,值 53.33 是 1/2、1/3 和 1/4 小时 1 的平均值。我希望这继续使用每个“HourValue”的前 3 个值继续向下列。

另外,请注意存在 1/5 小时 4 等实例。并非所有日期的小时数都相同,因此我正在寻找存在这些小时的日期的最后 3 小时值。

我希望这是有道理的。非常感谢您的帮助!

【问题讨论】:

    标签: python pandas conditional trailing


    【解决方案1】:

    你可以试试滚动平均

    df['3D Average'] = df.iloc[::-1].groupby('Hour').Value.rolling(window = 3).mean()\
    .shift().sort_index(level = 1).values
    

    【讨论】:

    • 太棒了,这太棒了。谢谢!
    • 嗨 Vaishali,确认一下,如果某些日期缺少正确的时间,这仍然有效吗?它不依赖于我假设的每个日期的 24 小时顺序。另外,我正在尝试为多个 Value 列循环,但我不能在 Value 中使用字典的组成部分,它会中断。
    【解决方案2】:

    您可以在日期列上groupby 并执行以下操作:

    df['3DAverage'] = df['Hour'].map(df.groupby('Hour').apply(lambda x: x.loc[x['Date'].isin(['1/2','1/3','1/4']),'Value'].mean()))
    
    df.head(6)
    
       Date   Hour Value 3DAverage
    0   1/1     1   57   53.333333
    1   1/1     2   43   42.333333
    2   1/1     3   44   45.333333
    3   1/2     1   51   53.333333
    4   1/2     2   40   42.333333
    5   1/2     3   42   45.333333
    

    【讨论】:

    • 嗨,马尼什。谢谢,但我发现我的问题不清楚。我想为整个系列填写此列,以便我始终拥有每一行的“3 天追踪平均值”。谢谢您的帮助。我已经编辑了原始问题。
    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 2019-04-10
    • 2017-10-29
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多