使用重叠索引拼接Pandas数据框,但不包含重叠值

3

我是一个帮助翻译文本的助手。

我有两个任意形状的DataFrame,类型为:

   A     B    C
0  A0   B0   C0
1  A1   B1   C1
2  A2   B2  NaN
3  A3  NaN  NaN
4  A4  NaN  NaN

并且

     A    B   C
2  NaN  NaN  C2
3  NaN   B3  C3
4  NaN   B4  C4
5   A5   B5  C5
6   A6   B6  C6

这两个数据框具有重叠的索引。在给定列的重叠部分中,一个数据框中存在非NaN值,而另一个数据框中存在NaN值。如何进行连接以获得一个包含所有值且没有NaN的数据框:

    A    B    C
0  A0   B0   C0
1  A1   B1   C1
2  A2   B2   C2
3  A3   B3   C3
4  A4   B4   C4
5  A5   B5   C5
6  A6   B6   C6

我的建议解决方案是:


df3 = pd.concat([pd.concat([df1[col].dropna(), df2[col].dropna()]) for col in df1.columns], axis=1)

然而,理想情况下我不想逐列工作。
2个回答

12

使用combine_first函数:

df = df1.combine_first(df2)

print(df)
    A   B   C
0  A0  B0  C0
1  A1  B1  C1
2  A2  B2  C2
3  A3  B3  C3
4  A4  B4  C4
5  A5  B5  C5
6  A6  B6  C6

1
这应该是被接受的答案,因为combine_first是专门为此设计的。 - user3471881

1
使用 df.fillna()df.append()dropna()一起使用。
df1.fillna(df2).append(df2).dropna()

    A   B   C
0   A0  B0  C0
1   A1  B1  C1
2   A2  B2  C2
3   A3  B3  C3
4   A4  B4  C4
5   A5  B5  C5
6   A6  B6  C6

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