cqwcns 发表于 2020-12-5 12:35

python pandas加列并按条件赋值

如下代码,我希望在”商户“后面新增一列,字段名为”区域“,并根据”商户“赋值,规则如下:
如果”商户“包含关键字”高州“,则区域=”高州“
如果”商户“包含关键字”茂南“,则区域=”茂南“
如果”商户“包含关键字”信宜“,则区域=”信宜“
如果”商户“包含关键字”化州“,则区域=”化州“


加列并赋值的代码要怎么写?
我查了一下应该是用apply,但未搞懂,请指教,谢谢

import numpy as np
import pandas as pd

symbol = ['BABA', 'JD', 'APPLE', 'MS', 'GS', 'WMT']
data = {'行业': ['电商', '电商', '科技', '金融', '金融', '零售'],
      '价格': ,
      '交易量': ,
      '雇员': ,
      '商户': ['高州市金山建文电讯手机经营部W', '茂名市茂南区大众电脑维修部', '茂名市通汇电信器材有限公司(茂名通汇直营)W',
               '信宜市镇隆镇亚芳手机店W', '中移铁通有限公司化州运营中心W', '信宜市盛汇通讯器材商行W']}
df = pd.DataFrame(data, index=symbol)
df.name = '美股'
df.index.name = '代号'
print(df)

nightlight 发表于 2020-12-5 13:36

regions = ['高州', '茂南', '信宜', '化州']
df['区域'] = df['商户'].apply(lambda x: ''.join())

rsnodame 发表于 2020-12-5 14:27

{:301_988:} 同意楼上
先写个函数,判断商户属于哪个区域;
apply调用这个函数

cqwcns 发表于 2020-12-5 14:52

nightlight 发表于 2020-12-5 13:36
regions = ['高州', '茂南', '信宜', '化州']
df['区域'] = df['商户'].apply(lambda x: ''.join(

有一个问题,因为商户有时可能是空的,当商户是是空时会报错,没有属实'find'。
所以要在加个判断,if商户为空是=”未知“,否则再判断。
AttributeError: 'float' object has no attribute 'find'

cqwcns 发表于 2020-12-5 15:21

nightlight 发表于 2020-12-5 13:36
regions = ['高州', '茂南', '信宜', '化州']
df['区域'] = df['商户'].apply(lambda x: ''.join(

你好,还是没搞懂匿名函数的表达式,因为商户有时可能是空的,当商户是是空时会报错,没有属实'find'。所以要在加个判断,if商户为空是=”未知“,否则再判断。怎么写?请指教,谢谢

cqwcns 发表于 2020-12-5 15:23

rsnodame 发表于 2020-12-5 14:27
同意楼上
先写个函数,判断商户属于哪个区域;
apply调用这个函数

你好,还是没搞懂匿名函数的表达式,因为商户有时可能是空的,当商户是是空时会报错,没有属实'find'。所以要在加个判断,if商户为空是=”未知“,否则再判断。怎么写?请指教,谢谢

rsnodame 发表于 2020-12-5 16:19

cqwcns 发表于 2020-12-5 15:23
你好,还是没搞懂匿名函数的表达式,因为商户有时可能是空的,当商户是是空时会报错,没有属实'find'。所 ...

{:301_1008:} 诶这个需求比较基础了…………
可以用if...else...的方式单独处理值为空的情况;
也可以用try...except...的办法捕获错误
页: [1]
查看完整版本: python pandas加列并按条件赋值