从另一个数据框中填充数据框的列

7
我正在尝试根据条件从另一个数据框中填充数据框的一列。假设我的第一个数据框是df1,第二个数据框命名为df2。
# df1 is described as bellow :
+------+------+
| Col1 | Col2 |
+------+------+
|   A  |  1   |
|   B  |  2   |
|   C  |  3   |
|   A  |  1   |
+------+------+

同时

# df2 is described as bellow :
+------+------+
| Col1 | Col2 |
+------+------+
|   A  |  NaN |
|   B  |  NaN |
|   D  |  NaN |
+------+------+

每个Col1的不同值都有一个id号码(在Col2中),所以我想要的是在df2.Col1==df1.Col1的情况下填充df2.Col2中的NaN值。 这样我的第二个数据框将看起来像:

# df2 :
+------+------+
| Col1 | Col2 |
+------+------+
|   A  |  1   |
|   B  |  2   |
|   D  |  NaN |
+------+------+

我正在使用Python 2.7


看一下numpy.where。 - Heiner Früh
2个回答

2
使用 drop_duplicates 结合 set_indexcombine_first
df = df2.set_index('Col1').combine_first(df1.drop_duplicates().set_index('Col1')).reset_index()

如果需要仅在id列中检查重复项:

df = df2.set_index('Col1').combine_first(df1.drop_duplicates().set_index('Col1')).reset_index()

2

这里有一个使用过滤器 df1.Col1 == df2.Col1 的解决方案。

df2['Col2'] = df1[df1.Col1 == df2.Col1]['Col2']

使用loc更好(但从我的角度来看不太清晰)

df2['Col2'] = df1.loc[df1.Col1 == df2.Col2, 'Col2']

3
我已经尝试了这个解决方案,但是返回了如下错误信息: ValueError: Can only compare identically-labeled Series objects。 - Kenza
好的,第一列中有两个A。请先使用 df1.drop_duplicates(inplace=True) - Olric
请注意,如果您有两行不同的文本,例如“A 1”和“A 2”,drop duplicate函数将不会删除其中一行,并且仍然会出现ValueError错误。这是一个好事情,因为它无法确定使用哪一行。 - Olric

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