#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