Python 匹配两列条件后,从第三列中选择值

Python 匹配两列条件后,从第三列中选择值,python,pandas,conditional-statements,Python,Pandas,Conditional Statements,我尝试使用下面的命令,但没有得到预期的结果 Expected outcome: | x | y | z | a | | -------- | ---------|----------|----------| | p1 | p2 | 100 | Nan | | p2 | p3 | 200 | 100 | | p3 | p4 |

我尝试使用下面的命令,但没有得到预期的结果

Expected outcome: 
|     x    |     y    |     z    |     a    |
| -------- | ---------|----------|----------|
|     p1   |     p2   |     100  |   Nan    |
|     p2   |     p3   |     200  |   100    |
|     p3   |     p4   |     300  |   200    |
|     p2   |     p3   |     400  |   300    |
|     p3   |     p4   |     500  |   400    |
|     p4   |     p5   |     600  |   500    |

此处重复出现在
x
y
中,因此解决方案更为复杂:

df['a']=df.loc[df['x'].isin(df['y']),'z']

输出是否正确?请您解释一下(元组,1)在映射变量中的作用@jezrael@user10689363-它从
y
g2
列创建元组,用于唯一映射值,换句话说,它用于重复数据消除。
df['a']=df.loc[df['x'].isin(df['y']),'z']
df['g1'] = df.groupby('x').cumcount()
df['g2'] = df.groupby('y').cumcount()

mapped = df.set_index(df[['y','g2']].apply(tuple, 1))['z']
df['new'] = df[['x','g1']].apply(tuple, 1).map(mapped)
print (df)
    x   y    z  g1  g2  new
0  p1  p2  100   0   0  NaN
1  p2  p3  200   0   0  100
2  p3  p4  300   0   0  200
3  p2  p3  400   1   1  NaN
4  p3  p4  500   1   1  400
5  p4  p5  600   0   0  300