【问题标题】:Python/pandas conditional statement based on date_time index values基于 date_time 索引值的 Python/pandas 条件语句
【发布时间】:2017-04-12 04:27:36
【问题描述】:

我有一个 Pandas 数据框,其时间序列索引基于使用 date_time 应用的日期范围,如下所示:

                     Column A
2016-11-24 00:00:00  4.0
2016-11-24 01:00:00  7.8
2016-11-24 02:00:00  95.1
2016-11-24 03:00:00  78.4
etc

我想做的是创建一个新列,根据索引中的月份将因子应用于 A 列。

修正系数:9 月 = 1、10 月 = 2、11 月 = 3、12 月 = 4 等等。

所以,在上面的例子中,因为月份是 11 月,所以结果是:

                     Column A   Column B
2016-11-24 00:00:00  4.0        12
2016-11-24 01:00:00  7.8        23.4
2016-11-24 02:00:00  95.1       285.3
2016-11-24 03:00:00  78.4       235.2
etc

我已经尝试了许多解决方案,对此有些麻烦。有人有什么建议吗?

【问题讨论】:

    标签: python datetime pandas conditional


    【解决方案1】:

    我认为您可以从month 中减去8,然后再减去multiple,但在September 之前的几个月中,1 的数字会更少:

    print (df.index.month - 8)
    [3 3 3 3]
    
    df['Column B'] = df['Column A'] * (df.index.month - 8)
    print (df)
                         Column A  Column B
    2016-11-24 00:00:00       4.0      12.0
    2016-11-24 01:00:00       7.8      23.4
    2016-11-24 02:00:00      95.1     285.3
    2016-11-24 03:00:00      78.4     235.2
    

    您也可以将map 与dict 结合使用,然后再与mul 结合使用。在此解决方案中,有必要从 df.index.month 创建 Series 并返回 numpy array,索引为 df(如果不是 index,则获取所有值 NaN,因为索引不匹配)。

    d = {9:1,10:2,11:3,12:4}
    
    df['Column B'] = pd.Series(df.index.month, index=df.index).map(d).mul(df['Column A'])
    print (df)
                         Column A  Column B
    2016-11-24 00:00:00       4.0      12.0
    2016-11-24 01:00:00       7.8      23.4
    2016-11-24 02:00:00      95.1     285.3
    2016-11-24 03:00:00      78.4     235.2
    

    【讨论】:

    • 谢谢。我选择了你的第二种方法。完美运行!
    • 超级好,很高兴能帮到你!
    猜你喜欢
    • 2018-09-26
    • 2020-07-09
    • 2017-02-03
    • 2018-11-09
    • 2016-11-28
    • 2013-03-05
    • 2019-12-15
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多