2016-07-22 2 views
3

, имеющие две колонок А и В в dataframe:Переменная сдвиг в пандах

A B 
0 1 6 
1 2 7 
2 1 8 
3 2 9 
4 1 10 

Я хотел бы создать столбец С. С должен иметь значения B, сдвинутый на значении А:

A B C 
0 1 6 NaN 
1 2 7 NaN 
2 1 8 7 
3 2 9 7 
4 1 10 9 

команда:

df['C'] = df['B'].shift(df['A']) 

не работает. Есть ли у вас какие-либо другие идеи?

ответ

1

Это сложно из-за выравнивания индекса, вы можете определить строку user и apply по-разному на вашем df, здесь функция выполнит сдвиг по столбцу B и вернет значение индекса (используя атрибут .name, чтобы вернуть индекс) сдвинутой колонки:

In [134]:  
def func(x): 
    return df['B'].shift(x['A'])[x.name] 
df['C'] = df.apply(lambda x: func(x), axis=1) 
df 

Out[134]: 
    A B C 
0 1 6 NaN 
1 2 7 NaN 
2 1 8 7.0 
3 2 9 7.0 
4 1 10 9.0 
1

Я хотел бы использовать помощь от numpy избежать apply

l = np.arange(len(df)) - df.A.values 
df['C'] = np.where(l >=0, df.B.values[l], np.nan) 
df 

    A B C 
0 1 6 NaN 
1 2 7 NaN 
2 1 8 7.0 
3 2 9 7.0 
4 1 10 9.0 

простой тест времени

enter image description here

Смежные вопросы