【问题标题】:Pandas - Compare two dataframes and replace values matching conditionPandas - 比较两个数据框并替换匹配条件的值
【发布时间】:2018-05-14 06:08:04
【问题描述】:

我有两个具有完全相同列数和行数的 pandas 数据帧(df1 和 df2)。 (列和索引名称也相同)这两个数据框中的值可能不同,也可能不同。

我想将 df1 中的每个值与 df2 中相应位置的值进行比较,如果 df2 中的值等于或大于 df1 中的值,我想用随机整数替换 df1 中的值。

所以我想我会想要这样的东西(但最好不要有任何循环)

for every value in df1
    df1.value - df2.value
    if df1.value < 1
        df1.value = np.random()

我尝试将 pandas df.replace 函数与 df.where 函数结合使用,但我似乎无法让它发挥作用。

编辑:我想添加一些我之前忘记的东西。 在分配我的随机 int 时,我希望它在基于我的相应值的范围内。所以它会是:

for every value in df1
    df1.value - df2.value
    if df1.value < 1
        df1.value = np.random( in range (df1.value -10, df.value +10)

我相信 Pietro Tortella 的答案不可能做到这一点,因为我正在处理整个数据框。

有人知道怎么解决吗?

【问题讨论】:

  • In 可以基于 df1 构建一个新的数据框,按照我想要的方式转换值,然后将其用作替换。

标签: python pandas dataframe


【解决方案1】:

如果内存不是问题,我会创建第三个随机数 DataFrame,并使用差异作为掩码进行替换。

比如

randoms = pd.DataFrame(
    np.random.randn(*df1.values.shape), 
    index=df1.index,
    columns=df1.columns
)

df1[df2 >= df1] = randoms[df2 >= df1]

【讨论】:

  • 为什么不 df2 >= df1 ?
  • 谢谢!我真的很喜欢这个解决方案,它看起来很干净。现在它可以工作,但在未来内存将是一个问题,因为我将使用非常大的数据帧(可能 > 1 gig 大小)
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多