【发布时间】:2015-11-25 10:46:57
【问题描述】:
我想按组滞后数据框中的每一列。我有一个这样的框架:
import numpy as np
import pandas as pd
index = pd.date_range('2015-11-20', periods=6, freq='D')
df = pd.DataFrame(dict(time=index, grp=['A']*3 + ['B']*3, col1=[1,2,3]*2,
col2=['a','b','c']*2)).set_index(['time','grp'])
看起来像
col1 col2
time grp
2015-11-20 A 1 a
2015-11-21 A 2 b
2015-11-22 A 3 c
2015-11-23 B 1 a
2015-11-24 B 2 b
2015-11-25 B 3 c
我希望它看起来像这样:
col1 col2 col1_lag col2_lag
time grp
2015-11-20 A 1 a 2 b
2015-11-21 A 2 b 3 c
2015-11-22 A 3 c NA NA
2015-11-23 B 1 a 2 b
2015-11-24 B 2 b 3 c
2015-11-25 B 3 c NA NA
This question 管理单个列的结果,但我有任意数量的列,我想滞后所有列。我可以使用groupby 和apply,但apply 在每一列上独立运行shift 函数,它似乎不喜欢接收[nrow, 2] 形状的数据帧作为回报。是否有像apply 这样的函数作用于整个组子帧?或者有更好的方法吗?
【问题讨论】: