如何从pandas DataFrame取单个值为另一DataFrame新增全为该值的列
pandas 新增列全量赋值问题解决
错误原因
你执行的df2['E']=df1['B'][df1['B']==4]返回的是带索引的pandas Series对象,筛选后得到的Series仅包含索引为1的行,pandas给DataFrame赋值新列时会自动按索引对齐,因此只有df2中索引为1的行能匹配到值,其余行默认填充NaN。
正确实现方法
你只需要先从筛选结果中提取出标量值,再给df2的新列赋值即可,常用写法如下:
- 方法1:使用
.item()提取标量(推荐,仅当筛选结果只有1个值时使用)# 从df1中提取目标标量值4 target_val = df1.loc[df1['B'] == 4, 'B'].item() # 给df2新增E列赋值 df2['E'] = target_val - 方法2:使用
.iloc[0]提取筛选结果的第一个值target_val = df1.loc[df1['B'] == 4, 'B'].iloc[0] df2['E'] = target_val - 方法3:直接赋值时调用
.values[0]实现广播
不想单独定义变量可以直接使用如下写法:df2['E'] = df1.loc[df1['B'] == 4, 'B'].values[0]
执行后得到的df2结果如下:
C D E 0 1 3 4 1 1 3 4
内容的提问来源于stack exchange,提问作者unicorn
相关产品推荐
相关产品推荐

