【发布时间】:2019-08-01 20:42:37
【问题描述】:
我正在使用以下格式的 DataFrame:
id Period value
1 201308 A
1 201309 A
.
1 201408 C
1 201409 D
.
.
2 201308 B
2 201309 C
.
2 201408 A
2 201409 B
我想创建一个列value_t1,其值为一年后,即Period+100。我设法做到了,但效率很低:
aux = df[['Period','value','id']].copy()
aux.rename(columns={'Period':'Period_t1','value':'value_t1'}, inplace=True)
df['Period_t1']=df.Period+100
df = df.merge(aux, on=['Period_t1','id'])
带来:
id Period value Period_t1 value_t1
1 201308 A 201408 C
1 201309 A 201409 D
.
.
2 201308 B 201408 A
2 201309 C 201409 B
.
.
这是我需要的(不需要Period_t1 列)。我觉得必须有一个更有效的 1 或 2 班轮,可能使用shift()。你有什么想法吗?
谢谢
【问题讨论】:
-
您的解决方案与我的非常相似。为什么它效率很低?
-
当我从同一数据集中检索数据时,合并似乎不是最佳选择
-
这很自然地看起来像是一个合并问题。您当然可以
set_index(['id', 'Period'])并使用loc访问。但是当未来日期不可用时,这会引发错误。 -
检查我的答案,我终于设法实现了我想要的