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