【问题标题】:Pandas Replace '0' with Variable Values using DictPandas 使用 Dict 将“0”替换为变量值
【发布时间】:2017-12-20 23:26:23
【问题描述】:

我有一个包含邮政编码和收入的数据框。有些收入是=0,这是错误的。

我有一本字典,其中每个邮政编码映射到该邮政编码内所有收入的平均收入。

我想用相应邮政编码的平均收入值替换我的数据框中 = 0 的所有收入。

我试过这个:

income = []
for row in df['income']:
    if row == 0:
        income.replace({0:{income_zip}}, inplace = True)
    else:
        income.append(row)

无济于事。我找到了很多资源来用相同的值替换所有的 0,我只是不确定如何用基于行中另一个值的 dict 中的变量值替换 0。

【问题讨论】:

    标签: python pandas dictionary dataframe replace


    【解决方案1】:

    您还可以定义您的转换函数并在您的数据框上沿轴 1(行)使用 apply

    def transform(row):
        d = {'zip_code_1': 'mean_income_1', 'zip_code_2': 'mean_income_2'}
        row['income'] = d[row['zip_code']] if row['income'] == 0 else row['income']
        return row
    
    df = df.apply(transform, axis=1)
    

    【讨论】:

      【解决方案2】:

      你想说这个吗?

      income = []
      for row in df['income']:
          if row == 0:
              df['income'].replace({0:{income_zip}}, inplace = True)
          else:
              income.append(row)
      

      【讨论】:

      • @bstrain 迭代数据帧值很少是最有效的解决方案。
      • 是的,我知道。我只处理大约 17k 行并且不追求速度。一般来说,我对 python 还是很陌生,只是在忙着完成这些工作。到时候我会跨过优化桥。
      【解决方案3】:

      或者这个单行:

      df['income'] = map(lambda x, y : y if y != 0 else income_zip[x], *[df['zip_codes'], df['income']])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-31
        • 2017-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        • 2017-01-28
        • 2020-02-09
        相关资源
        最近更新 更多