Pandas map传入多Series参数按国家规则计算新增day列的实现方法
Pandas多列关联计算新增列解决方案
你之前写法出错的原因是:country_in_deliever(df['Country'],df['Deliver'])是直接把两列整个Series作为参数执行函数,没有按行传入单个单元格值,且map方法仅支持对单列做映射,无法直接传入多列参数。
方案1:直接用行遍历apply适配现有函数
不需要修改你已经写好的country_in_deliever函数,直接用DataFrame的apply方法指定按行处理即可,1000行数据的场景下性能完全够用:
# axis=1 表示按行遍历,row代表当前行的Series对象 df['day'] = df.apply(lambda row: country_in_deliever(row['Country'], row['Deliver']), axis=1)
方案2:函数字典映射简化判断逻辑
如果后续国家规则继续增加,大量if elif会提升维护成本,可以把国家和对应处理函数做成字典映射,后续新增国家只需新增字典键值对即可,不用修改判断逻辑:
# 建立国家与处理函数的映射关系 country_func_map = { 'Us': Us, 'Hk': Hk # 后续新增国家直接在这里加键值对即可 } df['day'] = df.apply(lambda row: country_func_map[row['Country']](row['Deliver']), axis=1)
两种方案运行后都可以得到你预期的结果:
| 索引 | Country | Deliver | day |
|---|---|---|---|
| 0 | Us | 2 | 3 |
| 1 | Hk | 3 | 5 |
内容的提问来源于stack exchange,提问作者Tilei Liu
相关产品推荐
相关产品推荐

