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

无法按条件拆分DataFrame列值:根据列A奇偶提取对应值

搞定Pandas按条件拆分列的需求

咱们先理清楚你要解决的问题,然后一步步修正你的代码:

你的输入数据

0       1
0  0  10,30
1  1  10,40
2  2  20,50

需求规则&期望结果

你提到的规则是:原第0列(A)能被2整除时取原第1列(B)的第一个值,否则取第二个值,但你的期望结果里A=1(不能被2整除)时C是10(B的第一个值),A=2(能被2整除)时C是50(B的第二个值)——看起来可能是规则写反了?我下面会给出两种版本的代码,你按需选择。

先看你想要的最终结果:

A       B   C
0  0  10,30  10
1  1  10,40  10
2  2  20,50  50

你的现有代码问题

你写的df['n'] = np.where(df[0] % 2 == 0, df[0], 0 )这一步完全没用到列拆分的逻辑,只是返回原列值或0,和需求不沾边;后面的str.s...没写完,核心的字符串拆分步骤没完成。

正确解决方案

版本1:匹配你给出的期望结果(规则实际是:A能被2整除取B的第二个值,否则取第一个)

import pandas as pd
import numpy as np

# 初始化数据,先把列名改成A、B,方便阅读
df = pd.DataFrame([(0, '10,30'), (1, '10,40'), (2, '20,50')], columns=['A', 'B'])

# 把B列按逗号拆成两个整数列
df[['B_first', 'B_second']] = df['B'].str.split(',', expand=True).astype(int)

# 按条件选值生成C列
df['C'] = np.where(df['A'] % 2 == 0, df['B_second'], df['B_first'])

# 保留需要的列并调整顺序
df = df[['A', 'B', 'C']]

print(df)

版本2:严格按照你写的规则(A能被2整除取B的第一个值,否则取第二个)

如果是规则没错,只是期望结果写错了,把np.where那行改成下面这样就行:

df['C'] = np.where(df['A'] % 2 == 0, df['B_first'], df['B_second'])

这时候输出的C列会是[10, 40, 20]。

代码解释

  • str.split(',', expand=True):把B列的字符串按逗号拆成两个独立的列,astype(int)把字符串转成整数,避免后续操作出现类型问题
  • np.where(条件, 满足条件时取的值, 不满足时取的值):这是Pandas里做条件判断的高效方法,比apply快很多
  • 最后调整列顺序,得到你想要的结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:02