【问题标题】:pandas DataFrame: replace values in multiple columns with the value from anotherpandas DataFrame:用另一个值替换多列中的值
【发布时间】:2019-11-11 20:03:10
【问题描述】:

我有一个 pandas DataFrame,我想用同一行中另一个列的值替换选择列中的某些值。

我做了以下事情:

df[cols[23:30]] = df[cols[23:30]].apply(lambda x: x.replace(99, df['col1']))
df[cols[30:36]] = df[cols[30:36]].apply(lambda x: x.replace(99, df['col2']))
  • cols 是一个包含列名的列表。
  • 99 被认为是一个缺失值,我想用给定类的(已经计算的)平均值(即 col1 或 col2,取决于选择)替换它

它有效,但替换所有这些值所需的时间似乎比必要的要长。我认为必须有一种更快(计算上)的方法来实现相同的目标。

有什么建议吗?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你可以试试:

    import numpy as np
    
    df[cols[23:30]] = np.where(df[cols[23:30]] == 99, df[['col1'] * (30-23)], df[cols[23:30]])
    
    df[cols[30:36]] = np.where(df[cols[30:36]] == 99, df[['col2'] * (36-30)], df[cols[30:36]])
    

    df[["col1"] * n] 将创建具有完全相同的列重复n 次的数据框,因此如果遇到99,numpy 可以将其用作您想要遍历的n 列的掩码,否则采用相应的值,已经在那里了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2022-01-22
      • 2014-06-12
      • 2021-09-05
      相关资源
      最近更新 更多