我有一个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
我尝试了一些解决方案,但有些麻烦。有人有任何提示吗?
答案 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