基于date_time索引值的Python / pandas条件语句

时间:2016-11-28 12:33:59

标签: python datetime pandas conditional

我有一个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

我尝试了一些解决方案,但有些麻烦。有人有任何提示吗?

1 个答案:

答案 0 :(得分:3)

我认为您可以从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

您还可以dict使用map,然后mul使用多个{{3}}。在此解决方案中,必须从Series创建df.index.month,其返回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