我有一个带有datetimeindex的pandas DataFrame。我想创建一个label由数据的年份和月份组成的列。
我发现要做的方法是制作该列的副本并对其进行操作(我必须这样做,因为a DateTimeIndex没有apply方法)。我敢肯定,虽然有一定一种方法可以直接对索引进行操作,但是我找不到它:
import pandas as pd
import numpy as np
df = pd.DataFrame(index=pd.date_range(start="2012-01-01", end="2013-01-01", freq='D'), data=range(367))
monthly = df.resample("M")
monthly["label"] = monthly.index
monthly["label"] = monthly["label"].apply(lambda x: x.strftime("%Y-%m"))
Run Code Online (Sandbox Code Playgroud)
哪里monthly.head()给我:
0 label
2012-01-31 15.0 2012-01
2012-02-29 45.0 2012-02
2012-03-31 75.0 2012-03
2012-04-30 105.5 2012-04
2012-05-31 136.0 2012-05
Run Code Online (Sandbox Code Playgroud)
正是我想要的,我只想在源代码中没有倒数第二行的情况下执行此操作,因此我将其用作解决方法。
可能有一种简便的方法可以直接获取strftime结果,但是通常,当您希望将Index当作是一列而不将其实际添加时,可以调用.to_series():
>>> monthly.index.to_series().head()
2012-01-31 2012-01-31
2012-02-29 2012-02-29
2012-03-31 2012-03-31
2012-04-30 2012-04-30
2012-05-31 2012-05-31
Freq: M, dtype: datetime64[ns]
>>> monthly.index.to_series().apply(lambda x: x.strftime("%Y-%m")).head()
2012-01-31 2012-01
2012-02-29 2012-02
2012-03-31 2012-03
2012-04-30 2012-04
2012-05-31 2012-05
Freq: M, dtype: object
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2613 次 |
| 最近记录: |