cqwcns 发表于 2020-12-5 18:57

python pandas多列apply问题

以下代码的作用是新建一列,并根据['装维组/用户班']的数据对新列进行赋值,例如如果['装维组/用户班']包含“茂南”则新列的值=“茂南”,功能已实现。
regions = ['茂南', '电白', '高州', '化州', '信宜']
sheetOnTheWay['区域'] = sheetOnTheWay['装维组/用户班'].apply(lambda x: '区域为空' if pd.isnull(x) else ''.join())


但我现在想根据['装维组/用户班']、['五级地址名称']、['二级地址名称']这3列数据对新列进行赋值,即如果这3列有其中一个包含“茂南”则新列的值=“茂南”。
显然我这样写是不行的,请指教怎么写还是正确的,谢谢。

regions = ['茂南', '电白', '高州', '化州', '信宜']
sheetOnTheWay['区域'] = sheetOnTheWay['装维组/用户班', '五级地址名称', '二级地址名称'].apply(lambda x: '区域为空' if pd.isnull(x) else ''.join())

rsnodame 发表于 2020-12-6 18:59

比较复杂的处理过程不太建议用lambda匿名函数,可以考虑def一个自定义函数,这样更自由

cqwcns 发表于 2020-12-6 19:33

rsnodame 发表于 2020-12-6 18:59
比较复杂的处理过程不太建议用lambda匿名函数,可以考虑def一个自定义函数,这样更自由

已实现
listRegions = ['茂南', '电白', '高州', '化州', '信宜']


def getRegion(x):
    for strRegion in range(len(listRegions)):
      if x.范围.find(listRegions) >= 0:
            return listRegions

    for strRegion in range(len(listRegions)):
      if x.地址.find(listRegions) >= 0:
            return listRegions

    for strRegion in range(len(listRegions)):
      if x.商户.find(listRegions) >= 0:
            return listRegions
页: [1]
查看完整版本: python pandas多列apply问题