Python比较两列并在第三列和第二列匹配时从第一列写入第四列的值。

3

我有一个Excel表格有3列。我想比较第三列的值与第二列的值。如果该值存在于第二列,则将第一列的值写入第四列。如果该值不在第二列中,则在第四列中写入NA。可能有时候第三列的值为空,那么就没有东西可以进行比较。

示例: 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个回答

2

使用由DataFrame.set_index创建的另一个Series通过Series.map,如果不匹配,则默认为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

谢谢@jezrel。我发现还有一件事,就是在末尾添加了.0。也就是说,在一些初始列中的int变成了float。你知道为什么吗? - Starter
@Starter - 我猜只添加整数,但如果至少一个NaN将值转换为浮点数,则这是设计上的。 但在pandas的最新版本中,解决带有NaN的整数一起工作的问题,请查看此链接 - jezrael
@Starter - 如果添加字符串值,则不会像我的答案那样转换为浮点数。这只是一个“整数”问题。 - jezrael
1
好的,我明白了。非常感谢。 - Starter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接