我有一个从外部数据创建的数据框,大致看起来像这样
private Config() {
}
public static final String YOUTUBE_API_KEY = "code value";
我需要一个新列df = pandas.DataFrame([(5, 5821, 5),
(5, 5819, 6),
(5, 5818, 7),
(6, 5818, 12),
(7, 119, 20),
(7, 118, 0),
(7, 116, 11),
(7, 115, 15),
(7, 114, 17)],
columns=(('ID', 'SUBID', 'VALUE'))).set_index(['ID', 'SUBID'])
,其中包含当前行PREV_VALUE
的值VALUE
。那是
(ID, SUBID - 1)
我可以使用 VALUE PREV_VALUE
ID SUBID
5 5821 5 NaN
5819 6 7
5818 7 NaN
6 5818 12 NaN
7 119 20 0
118 0 NaN
116 11 15
115 15 17
114 17 NaN
混淆我的方式,但这对于大型数据帧来说速度非常慢。有什么想法吗?
答案 0 :(得分:0)
这就是你想要的吗?
df2 = pd.DataFrame(df.values,
index=pd.MultiIndex.from_tuples([(tup[0], tup[1]+1)
for tup in df.index.get_values()],
names=df.index.names),
columns=df.columns)
df.join(df2, how='left', rsuffix='PREV_VALUE')
结果:
In [126]: df.join(df2, how='left', rsuffix='PREV_VALUE')
Out[126]:
VALUE VALUEPREV_VALUE
ID SUBID
5 5821 5 NaN
5819 6 7.0
5818 7 NaN
6 5818 12 NaN
7 119 20 0.0
118 0 NaN
116 11 15.0
115 15 17.0
114 17 NaN