python - 如何根据条件合并两个pandas数据框

标签 python pandas

我有两个数据框,如下所示:

df1
      A       B 
0     0       3
1     0       2
2     1       5
3     1       3
4     2       5
5   'Ciao'  'log'
6     3       4


df2
      A   B 
0     0   -1
1     0   20
2     1   -2
3     1   33
4     2   17

我想合并两个数据帧,以便 if A==0保留 df1 的值否则保留 df2 的值.

最后,我想要如下内容

df2
      A   B 
0     0   3
1     0   2
2     1   -2
3     1   33
4     2   17

最佳答案

假设数据帧已对齐(并且 df1 中的重复索引 3 是一个拼写错误),您不需要合并,而是使用 where 的条件:

out = df1.where(df1['A'].eq(0), df2)

输出:

   A   B
0  0   3
1  0   2
2  1  -2
3  1  33
4  2  17

注意。如果你真的想要合并,你必须进一步解释合并的逻辑并提供一个重要的例子。

更新的示例:

您似乎仍然有部分对齐的索引,但想要获得交集:

out = (df1.where(df1['A'].eq(0), df2)
          .loc[df1.index.intersection(df2.index)]
      )

或者:

out = (df1.reindex_like(df2)
          .where(df1['A'].eq(0), df2)
      )

输出:

     A     B
0  0.0  -1.0
1  0.0  20.0
2  1.0  -2.0
3  1.0  33.0
4  2.0  17.0

关于python - 如何根据条件合并两个pandas数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74530992/

相关文章:

python - 某些边有边框

python - Pandas :折叠多索引数据框中的行

python - 更改 Pycharm Emacs 键绑定(bind)以使用不同的单词分隔符

python - 如何将 np.int64 转换为 PandasSeries 的 python int64?

python - 我们有一个 n 列的数据框。并想要计算每列中特定数字的频率

python - 从 python pandas 中的 DataFrame 中删除特定行

python - 我应该如何从基于 PRNG 的生成转向基于哈希的过程生成?

python - python有soundex函数吗?

python - 从多索引表中获取最大行

python - 在 python df 中为变量分配一个连续编号