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

如何依据另一列的值拆分数值列?基于布尔列拆分整数列

解决方案:根据条件拆分数值列

嘿,我刚好处理过类似的需求,给你几个实用的方案,完全适配整数类型的处理,不用纠结字符串操作的那些例子!

一、针对你给出的True/False拆分场景

先还原你的示例数据:

import pandas as pd

df = pd.DataFrame({
    'A': [True, False, True, False],
    'X': [3, 6, 2, 4]
})

方法1:用Pandas的where方法(最直观)

where方法会在条件满足时保留原数值,不满足时返回NaN,刚好贴合你的拆分需求:

# 当A为True时,Y列取X的值,否则为NaN
df['Y'] = df['X'].where(df['A'])
# 当A为False时,Z列取X的值,否则为NaN
df['Z'] = df['X'].where(~df['A'])

# 如果你想把NaN显示为空字符串(和你的示例格式一致),可以用fillna,注意这会把列转为object类型
df['Y'] = df['Y'].fillna('').astype(object)
df['Z'] = df['Z'].fillna('').astype(object)

方法2:用numpy.where(更灵活)

如果你习惯用numpy的工具,np.where可以直接实现条件赋值,一步到位:

import numpy as np

df['Y'] = np.where(df['A'], df['X'], '')
df['Z'] = np.where(~df['A'], df['X'], '')

这个方法对整数类型完全友好,直接生成你需要的空字符串格式。

二、通用场景:依据任意列的值拆分数值列

如果你的拆分依据不是True/False,而是其他分类值(比如分组标签),可以用下面两种方法:

方法1:用pivot透视

假设你的数据是按分组列拆分,示例如下:

df = pd.DataFrame({
    'Group': ['G1', 'G2', 'G1', 'G2'],
    'X': [5, 7, 9, 11]
})

# 透视拆分,自动生成对应分组的列
pivot_df = df.pivot(columns='Group', values='X').reset_index(drop=True)
# 重命名列(可选)
pivot_df.columns = ['Y', 'Z']
# 和原数据合并
df = df.join(pivot_df)

方法2:用get_dummies+乘法

这种方法适合快速生成拆分列:

# 生成分组的哑变量
dummies = pd.get_dummies(df['Group'])
# 哑变量和数值列相乘,得到拆分后的列
df[['Y', 'Z']] = dummies.mul(df['X'], axis=0)

拆分后的空值同样可以用fillna('')处理成空字符串。

补充一句:你提到会用df[Y] + df[Z]合并列,拆分其实就是反向的筛选逻辑——通过条件判断把数值分配到对应的列里,这些方法都不会改变原数值的类型(除非你主动转成字符串),完全满足整数处理的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:41:17