Определите следующую строку с тем же значением и создайте новый столбец pandas data frame

#python #pandas #loops #dataframe #iterator

#python #pandas #циклы #dataframe #итератор

Вопрос:

У меня есть следующий DataFrame:

 import pandas as pd

# create simple dataset of people
data_pandas = pd.DataFrame({'Order': [1, 1, 1,1,2,2,2],
                             'X': [30,44,30,44,44,30,44],
                             'Y': [46,46,35,45,90,60,60]})
  

Я хочу создать новый столбец ‘Z’ со следующей логикой:
Определите следующую строку с тем же значением ‘X’ и создайте новый столбец ‘Z’ со значением ‘Y’ этой строки на основе столбца ‘Order’.

Результат будет выглядеть следующим образом

 data_pandas_result = pd.DataFrame({
        'Order': [1, 1, 1,1,2,2,2],
        'X': [30,44,30,44,44,30,44],
        'Y': [46,46,35,45,90,60,60],
        'Z': [35,45,NA,NA,60,NA,NA]})
  

Как мне сделать это эффективно? Я мог бы подумать о подстановке фрейма данных на основе порядка и поиске соответствующего соответствия

Ответ №1:

Основываясь на вашей логике, groupby shift

 df['Z']=df.groupby(['Order','X']).Y.shift(-1)
df
Out[327]: 
   Order   X   Y        Z
0      1  30  46 35.00000
1      1  44  46 45.00000
2      1  30  35      nan
3      1  44  45      nan
4      2  44  90 60.00000
5      2  30  60      nan
6      2  44  60      nan