如何为Python现有Pandas DataFrame添加列及条件因子变量列
问题1:将同行数的df2列追加到现有df
有三种常用方案,适配不同场景:
- 多列合并首选
pd.concat,沿列轴拼接即可,自动保留df2的原有列名:df = pd.concat([df, df2], axis=1) - df2仅为单列时,可直接赋值:
假设取df2的第一列,自定义列名为target_col:df['target_col'] = df2.iloc[:, 0] - 若要使用
assign方法,把df2解包为字典传入即可:df = df.assign(**df2)
问题2:生成多分类因子列
最灵活的方案是先初始化列默认值,再通过布尔索引为符合条件的行赋值,适配后续还要调整C类规则的需求:
- 先计算df2数值列的10%、90%分位数(假设合并后df2的列名为
val_col):q10, q90 = df['val_col'].quantile([0.1, 0.9]) - 初始化分类列,默认值设为C,再修改A、B类对应行的值:
df['factor_col'] = 'C' df.loc[df['val_col'] <= q10, 'factor_col'] = 'A' df.loc[df['val_col'] >= q90, 'factor_col'] = 'B'
后续需要根据df3调整C类取值时,直接新增loc条件修改对应行即可。
示例场景完整代码
对应你给出的df1合并df2、生成二分类列的需求,完整实现如下:
import pandas as pd # 示例数据(你实际使用时替换为自己读入的df、df2即可) df1 = pd.DataFrame({'weight': [55, 65, 75, 85, 95], 'height': [160, 170, 175, 180, 185]}) df2 = pd.DataFrame({'age': [22, 35, 42, 50, 38]}) # 合并列 df = pd.concat([df1, df2], axis=1) # 生成二分类列 df['sex'] = 'B' df.loc[df['age'] < 40, 'sex'] = 'A'
最终得到的df可直接用于后续的分组筛选、统计、绘图操作。
内容的提问来源于stack exchange,提问作者user14467343
相关产品推荐
相关产品推荐

