【问题标题】:How to replace data in dataframe based on a condition如何根据条件替换数据框中的数据
【发布时间】:2021-10-13 06:45:21
【问题描述】:

我有 2 个数据框:df1 和 df2

df1 = pd.DataFrame()
df1['Cat'] = [0,1,2]
df1['Mouse'] = [12,13,17]
df1['Dog'] = [18,22,89]
df1

   Cat  Mouse   Dog
0   0   12      18
1   1   13      22
2   2   17      89

df2 = pd.DataFrame()
df2['Cat'] = [0.94, 0.86, 0.04]
df2['Mouse'] = [1,0.12,0.13]
df2['Dog'] = [0.03,0.025,0.17]
df2

    Cat     Mouse     Dog
0   0.94    1.00    0.030
1   0.86    0.12    0.025
2   0.04    0.13    0.170

只有当 df2 值

我想要的输出如下:

    Cat  Mouse  Dog
0   0.0   12    NaN
1   1.0   13    NaN
2   NaN   17    89.0

谢谢!

编辑 - 感谢所有建议,如果我在 df1 和 df2 中的列的顺序不同,我有办法修改代码吗? IE。 df1 的列是 Cat、dog、mouse 和 df2 是 dog、mouse、cat

【问题讨论】:

  • 嗨@user16413457。有没有解决方案?如果是这样并且您愿意,请标记它,以便可以将此问题标记为已解决。谢谢!

标签: python pandas numpy


【解决方案1】:

你可以这样做:

 >>> df1.where(df2 > 0.05)

   Cat  Mouse   Dog
0  0.0     12   NaN
1  1.0     13   NaN
2  NaN     17  89.0

【讨论】:

  • 谢谢,如果我在 df1 和 df2 中的列的顺序不同,我有办法修改代码吗? IE。 df1 列是 Cat、dog、mouse,df2 是 dog、mouse、cat
  • 我在本地尝试过,它适用于任何列顺序:df1: Cat Mouse Dog 0 0 12 18 1 1 13 22 2 2 17 89 >> df2: Cat Dog Mouse 0 0.94 0.030 1.00 1 0.86 0.025 0.12 2 0.04 0.170 0.13 给出相同的结果
【解决方案2】:

试试这个:

df1.mask(df2.lt(.05))

【讨论】:

  • 谢谢,如果我在 df1 和 df2 中的列的顺序不同,我有办法修改代码吗? IE。 df1 列是 Cat、dog、mouse,df2 是 dog、mouse、cat
  • 是的,如另一个答案的 cmets 部分所述,顺序无关紧要。只要列名相同,就可以了。
【解决方案3】:

你可以试试这个,没有任何功能:

import numpy as np

df1[df2 < 0.05] = np.nan

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2020-07-05
    • 2020-10-06
    • 2020-06-15
    相关资源
    最近更新 更多