一年后为熊猫中的每个组创建具有价值的列

时间:2019-08-01 20:42:37

标签: python pandas date

我正在使用以下格式的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班轮。你有什么想法吗?

谢谢

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)