标识具有相同值的下一行并创建新的列pandas数据框

时间:2019-03-14 01:06:44

标签: python pandas loops dataframe iterator

我有以下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”值的下一行,并基于“订单”列以该行的“ Y”值创建新的“ Z”列。

输出看起来像这样

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 个答案:

答案 0 :(得分: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