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

基于Pandas列表列的条件从另一列表列返回对应值的实现方案

解决Pandas DataFrame根据列表列条件生成新列的问题

嘿,我来帮你搞定这个需求!你已经迈出了第一步——筛选出Second列包含'adj'的行,但我们的目标不是过滤行,而是给整个DataFrame新增一列,下面给你两种实用的方法:

方法一:用apply逐行处理(直观易懂)

这种方法适合快速实现逻辑,代码可读性很强:

# 新增Target列,当Second包含'adj'时取First列表的第一个元素,否则设为None
df['Target'] = df.apply(lambda row: row['First'][0] if 'adj' in row['Second'] else None, axis=1)
  • axis=1表示按行处理每一条数据
  • 条件判断'adj' in row['Second']检查当前行的Second列表是否包含目标值
  • 满足条件时取row['First'][0],也就是First列表的第一个元素(正好对应你期望的结果)

方法二:用掩码+向量化操作(更高效,适合大型DataFrame)

如果你的DataFrame数据量很大,推荐用这种方法,比apply的执行效率更高:

# 第一步:创建布尔掩码,标记哪些行的Second列包含'adj'
mask = df['Second'].map(lambda x: 'adj' in x)

# 第二步:初始化Target列,然后给符合条件的行赋值
df['Target'] = None
df.loc[mask, 'Target'] = df.loc[mask, 'First'].str[0]
  • df['First'].str[0]是Pandas的向量化操作,能直接对整个列表列取第一个元素,比逐行循环快很多
  • 掩码mask会生成一个布尔数组,精准定位需要赋值的行

验证结果

执行完上面任意一种方法后,你的DataFrame会变成这样:

First                  Second  Target
0        ['First', 'value']        ['adj', 'noun']   First
1       ['second', 'value']        ['adj', 'noun']  second
2  ['third', 'value', 'is']  ['adj', 'noun', 'verb']   third
3  ['fourth', 'value', 'is'] ['adj', 'noun', 'verb']  fourth

完全符合你期望的第三列结果!

另外补充一句:如果你的数据里所有行的Second列都包含'adj'(就像示例里的情况),那可以直接简化成df['Target'] = df['First'].str[0],省掉条件判断~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:13:14