如何在Pandas中将指定行的列作为常量列添加到另一DataFrame并重命名
实现方法详解
这事儿其实不难,咱们可以用几种简洁的方式来完成需求,下面一步步来演示:
1. 先创建示例数据
首先咱们先把题目里的两个DataFrame用代码还原出来,方便后续操作:
import pandas as pd # 题目里的单行源DataFrame source_df = pd.DataFrame({'x': [1], 'p': [4], 'y': [2], 'q': [5], 'z': [3]}) # 目标DataFrame(添加列之前的状态) target_df = pd.DataFrame({'A': [7, 9, 8], 'B': [8, 6, 5]})
2. 方法一:直接提取常量赋值(最直观)
因为源DataFrame只有一行,咱们可以直接提取x、y、z列的单个值,然后直接赋值给目标DataFrame的新列a、b、c——Pandas会自动把这个常量广播到所有行:
# 提取源DF里的常量值 a_val = source_df['x'].iloc[0] b_val = source_df['y'].iloc[0] c_val = source_df['z'].iloc[0] # 给目标DF添加新列 target_df['a'] = a_val target_df['b'] = b_val target_df['c'] = c_val
3. 方法二:用assign()链式操作(更简洁)
如果喜欢更紧凑的代码风格,可以用Pandas的assign()方法,一次性完成所有新列的添加,还能保持链式调用的清爽:
target_df = target_df.assign( a=source_df['x'].iloc[0], b=source_df['y'].iloc[0], c=source_df['z'].iloc[0] )
4. 方法三:批量提取重命名后合并(适合多列场景)
如果需要处理的列很多,不想一个个写赋值语句,可以先提取源DF的指定列、重命名,再通过广播合并到目标DF:
# 提取源DF的x/y/z列并重命名为a/b/c const_columns = source_df[['x', 'y', 'z']].rename(columns={'x':'a', 'y':'b', 'z':'c'}) # 将单行的常量列重复目标DF的行数,再合并 target_df = pd.concat( [target_df, const_columns.loc[const_columns.index.repeat(len(target_df))].reset_index(drop=True)], axis=1 )
验证结果
不管用哪种方法,执行完后打印target_df,都会得到你想要的结果:
A B a b c 0 7 8 1 2 3 1 9 6 1 2 3 2 8 5 1 2 3
内容的提问来源于stack exchange,提问作者user8044236
相关产品推荐
相关产品推荐

