我想将 pandas 列移动一段时间,并重新索引数据帧以适应此移动。 采用以下数据框:
df = pd.DataFrame({"Col1": [10, 20, 15, 30, 45],
"Col2": [13, 23, 18, 33, 48],
"Col3": [17, 27, 22, 37, 52]},
index=pd.date_range("11:00", "13:00", freq="30min"))
我想将 Col1
移动 15 分钟,并更新数据帧的日期时间索引以允许这些新值。但是,如果我将 Col1
移动 15 分钟,您可以看到,因为它与索引不对齐,所以整个列都设置为 NaN
值:
df["Col1"] = df["Col1"].shift(15, freq="T")
print(df)
Col1 Col2 Col3
2021-03-25 11:00:00 NaN 13 17
2021-03-25 11:30:00 NaN 23 27
2021-03-25 12:00:00 NaN 18 22
2021-03-25 12:30:00 NaN 33 37
2021-03-25 13:00:00 NaN 48 52
我希望数据框看起来像这样:
Col1 Col2 Col3
2021-03-25 11:00:00 NaN 13.0 17.0
2021-03-25 11:15:00 10.0 NaN NaN
2021-03-25 11:30:00 NaN 23.0 27.0
2021-03-25 11:45:00 20.0 NaN NaN
2021-03-25 12:00:00 NaN 18.0 22.0
2021-03-25 12:15:00 15.0 NaN NaN
2021-03-25 12:30:00 NaN 33.0 37.0
2021-03-25 12:45:00 30.0 NaN NaN
2021-03-25 13:00:00 NaN 48.0 52.0
2021-03-25 13:15:00 45.0 NaN NaN
(我使用以下代码创建的:)
df = pd.DataFrame({"Col1": [float('nan'), 10, float('nan'), 20, float('nan'), 15, float('nan'), 30, float('nan'), 45],
"Col2": [13, float('nan'), 23, float('nan'), 18, float('nan'), 33, float('nan'), 48, float('nan')],
"Col3": [17, float('nan'), 27, float('nan'), 22, float('nan'), 37, float('nan'), 52, float('nan')]},
index=pd.date_range("11:00", "13:15", freq="15min"))
如果有任何建议,我们将不胜感激!
最佳答案
使用 concat 检查
out = pd.concat([df.pop("Col1").shift(15, freq="T"),df],axis=1)
Out[478]:
Col1 Col2 Col3
2021-03-24 11:00:00 NaN 13.0 17.0
2021-03-24 11:15:00 10.0 NaN NaN
2021-03-24 11:30:00 NaN 23.0 27.0
2021-03-24 11:45:00 20.0 NaN NaN
2021-03-24 12:00:00 NaN 18.0 22.0
2021-03-24 12:15:00 15.0 NaN NaN
2021-03-24 12:30:00 NaN 33.0 37.0
2021-03-24 12:45:00 30.0 NaN NaN
2021-03-24 13:00:00 NaN 48.0 52.0
2021-03-24 13:15:00 45.0 NaN NaN
关于python - Pandas如何将列按日期时间移动到不在索引中的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66792507/