Python/pandas 基于 date_time 索引值的条件语句
Python/pandas conditional statement based on date_time index values
我有一个 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
我已经尝试了很多解决方案,但有些问题。有人有什么建议吗?
我认为您可以从 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
by dict
and then multiple by mul
。在此解决方案中,有必要从 df.index.month
创建 Series
,其中 return 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
我有一个 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
我已经尝试了很多解决方案,但有些问题。有人有什么建议吗?
我认为您可以从 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
by dict
and then multiple by mul
。在此解决方案中,有必要从 df.index.month
创建 Series
,其中 return 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