如何使用Pandas为DataFrame中满足x=1条件的行添加对应列值
用Pandas实现指定行填充新列数据的方法
这事儿其实挺简单的,咱们可以通过布尔索引结合loc来精准赋值,直接上实操步骤:
1. 先创建示例数据(方便你直接测试)
import pandas as pd # 原始DataFrame df = pd.DataFrame({ 'x': [1, 2, 1], 'y': [2, 3, 6], 'z': [3, 4, 7] }) # 需要添加的a列数据 a_data = pd.Series([4, 5], name='a')
2. 核心实现步骤
咱们的思路是:先给原DataFrame新增一个全为NaN的a列,然后只给x=1的行填充a_data里的值:
# 新增a列,初始值全为NaN df['a'] = pd.NA # 筛选x等于1的行,给这些行的a列赋值a_data的数值 df.loc[df['x'] == 1, 'a'] = a_data.values
3. 验证结果
运行完上面的代码后,打印df就能得到你想要的结果:
x y z a 0 1 2 3 4.0 1 2 3 4 NaN 2 1 6 7 5.0
补充:更简洁的写法(一行搞定)
如果想少写几行,也可以用assign结合where来实现,逻辑是一样的:
df = df.assign( a=lambda d: d['x'].eq(1).cumsum().map(pd.Series(a_data.values, index=[1,2])).where(d['x'].eq(1)) )
这里的思路是先给x=1的行做累加标记(1、0、2),再把标记对应到a_data的值,最后用where只保留x=1的行的赋值,其他行留NaN。
内容的提问来源于stack exchange,提问作者jr123456jr987654321




