python比较2列,如果第3列与第2列匹配,则用第1列的值编写第4列

时间:2019-03-08 09:46:31

标签: python pandas replace

我在Excel文件中有3列。我想比较col 3中的值和col2中的值。如果col2中存在该值,则将col1的值写入col4。如果该值不在col2中,则将NA写入col4。col3有时可能为空值,在这种情况下,没有什么可比较的。

示例: Excel文件

col1    col2    col3
a2      2        4
1d      3        2
cc      5        3
12      4        1

预期结果:

col1    col2    col3    col4
a2      2        4       12
1d      3        2       a2
cc      5        3       1d
12      4        1       NA

仍在进行中。指针将非常有帮助。

1 个答案:

答案 0 :(得分:2)

默认情况下,Series.map与另一个由DataFrame.set_index创建的Series使用NaN

df = pd.read_excel(file)

df['col4'] = df['col3'].map(df.set_index('col2')['col1'])
print (df)
  col1  col2  col3 col4
0   a2     2     4   12
1   1d     3     2   a2
2   cc     5     3   1d
3   12     4     1  NaN

如果在col2中可能重复,则会引发错误:

  

InvalidIndexError:仅对具有唯一值的索引对象有效的索引重新建立索引

解决方案已添加DataFrame.drop_duplicates

print (df)
  col1  col2  col3
0   a2     2     4
1   1d     2     2
2   cc     5     3
3   12     4     1

df['col4'] = df['col3'].map(df.drop_duplicates('col2').set_index('col2')['col1'])
print (df)
  col1  col2  col3 col4
0   a2     2     4   12
1   1d     2     2   a2
2   cc     5     3  NaN
3   12     4     1  NaN