我有一个熊猫DataFrame看起来像:

  ID  |   StateName   |   ZipCode
____________________________________
  0          MD            20814
  1                        90210
  2          DC            20006
  3                        05777
  4                        12345


我有一个函数,它将基于ZipCode值填充StateName:

def FindZip(x):
    search = ZipcodeSearchEngine()
    zipcode = search.by_zipcode(x)
    return zipcode['State']


我想根据相应的ZipCode的值填写StateName列中的空白。我尝试失败了:

test['StateName'] = test['StateName'].apply(lambda x: FindZip(test['Zip_To_Use']) if x == "" else x)


基本上,我想将功能应用于不同于我要更改的列的列。我将不胜感激任何帮助!谢谢!

最佳答案

您可以尝试以下操作:

test['StateName'] = test.apply(lambda x: FindZip(test['Zip_To_Use'])
                                      if x['StateName'] == ""
                                      else x['StateName'], axis = 1)


上面的代码适用于数据框而不是StateName,并且使用axis = 1适用于列。

更新:

if语句中使用多个条件进行了更新(查看下面的解决方案):

test['StateName'] = test.apply(lambda x: FindZip(test['Zip_To_Use'])
                                if ((x['StateName'] == "") and  (x['Zip_To_Use'] != ""))
                                else x['StateName'], axis = 1)

10-06 06:28