You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法基于其他列在Pandas DataFrame中创建新列,求助解决

问题:DataFrame中根据条件生成新列

用户场景:
在第一份Python工作的首次编码任务中,无法在DataFrame中创建符合要求的新列,尝试过lambda、isin、contains方法,需求如下:

DataFrame数据(前两列dtype为object):

Country code| Countries                  || Column c |
KR          | KR~CN_SG~PH                || Valid    |
RO          | CN~PK                      || Invalid  |
NL          | CZ_BE~NL_IT~DE             || Valid    |
SG          | HK~SK_DZ_AL_CN_GR_RU~SA~SG || Valid    |
US          | ZA~SE~ES~CH_UA             || Invalid  |

规则:

  • Valid:当Country code的值作为独立项存在于Countries列的内容中时
  • Invalid:当Country code的值未作为独立项出现在Countries列的内容中时

解决方案

方法1:分割字符串后精准匹配(推荐)

把Countries列按分隔符~拆分成列表,再判断国家代码是否在列表内,能避免部分字符误匹配的问题:

import pandas as pd

# 构造示例DataFrame(实际使用时替换为你的数据)
df = pd.DataFrame({
    'Country code': ['KR', 'RO', 'NL', 'SG', 'US'],
    'Countries': ['KR~CN_SG~PH', 'CN~PK', 'CZ_BE~NL_IT~DE', 'HK~SK_DZ_AL_CN_GR_RU~SA~SG', 'ZA~SE~ES~CH_UA']
})

# 生成目标列
df['Column c'] = df.apply(
    lambda row: 'Valid' if row['Country code'] in row['Countries'].split('~') else 'Invalid',
    axis=1
)

方法2:结合numpy简化写法

如果习惯用numpy的条件判断,可以这样写:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Country code': ['KR', 'RO', 'NL', 'SG', 'US'],
    'Countries': ['KR~CN_SG~PH', 'CN~PK', 'CZ_BE~NL_IT~DE', 'HK~SK_DZ_AL_CN_GR_RU~SA~SG', 'ZA~SE~ES~CH_UA']
})

df['Column c'] = np.where(
    df.apply(lambda x: x['Country code'] in x['Countries'].split('~'), axis=1),
    'Valid',
    'Invalid'
)

方法3:正则精准匹配

如果想用str.contains,可以通过正则限定匹配边界,确保只匹配完整的国家代码项:

df['Column c'] = df.apply(
    lambda row: 'Valid' if df['Countries'].str.contains(f'(^|~){row["Country code"]}(~|$)').iloc[row.name] else 'Invalid',
    axis=1
)

为什么之前的方法可能失效?

  • isin方法是判断元素是否在序列中,直接用df['Country code'].isin(df['Countries'])会因为Countries是字符串而非列表,导致判断逻辑错误。
  • 直接使用str.contains会出现部分匹配问题,比如CN会匹配到CN_SG,而我们需要的是完整的CN独立项。

内容的提问来源于stack exchange,提问作者martinworkshere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:10:44