我正在使用以下格式的DataFrame:
select_sequential_consistency=1
我想创建一列plt.bar(Df.A, Df.B, align='center', alpha=0.5)
plt.xlabel("A")
plt.ylabel('B')
,该列的值在一年后,即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
.
.
来提高效率1或2班轮。你有什么想法吗?
谢谢
答案 0 :(得分:0)
尝试:
df['Period_'] = df['Period'] + 100
(df.merge(df.drop('Period_', axis=1),
left_on=['id','Period_'],
right_on=['id','Period'],
suffixes=['','_t1'])
.drop('Period_', axis=1)
)
输出:
id Period value Period_t1 value_t1
0 1 201308 A 201408 C
1 1 201309 A 201409 D
2 2 201308 B 201408 A
3 2 201309 C 201409 B
答案 1 :(得分:0)
设法做得更好,它比预期的要容易:
df['value_t1'] = df.groupby(['id']).value.shift(-12)