如何将日期和小时列合并为pandas系列中的一个索引列?

2 投票
2 回答
1283 浏览
提问于 2025-04-18 09:12

我有一个 pandas 的序列,长得像这样:

df.head()
Country  Day         Hour
DE       2013-01-01  1       36504
                     2       35142
                     3       33723
                     4       32375
                     5       31876
dtype: float64

它的索引列是

'Country', 'Day', 'Hour' 

,是多重索引(MultiIndex),而“Day”是日期时间格式。实际的数值(负载)在没有标签的列里。

现在我想把“Day”和“Hour”这两列合并成一个“Date”索引列。我查了很多资料,目前只看到一些基于 pd.read_csv 和 pd.read_table 的解决方案。不过因为这是一个序列(不是数据框 / csv / excel),这些方案似乎不适用。

2 个回答

2
df["Day"] + pd.to_timedelta(df["Hour"])

应该可以正常工作。

1

你可以把它们加起来(前提是先把小时数乘以纳秒的数量),不过你得使用numpy来进行计算*:

In [11]: dr = pd.date_range('2014', periods=5)

In [12]: hours = pd.Index(np.arange(5))

In [13]: pd.DatetimeIndex(dr.values + hours.values * pd.offsets.Hour(1).nanos)
Out[13]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-01 00:00:00, ..., 2014-01-05 04:00:00]
Length: 5, Freq: None, Timezone: None

注意:MultiIndex中的每一层都是一个索引,但用Series或np.array也可以这样操作。

*显然,Index重写了+运算符,使得它可以进行追加操作...

要访问MultiIndex的各个层级,可以使用get_level_values,具体可以参考另一个问题

撰写回答