我在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
仍在进行中。指针将非常有帮助。
答案 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