如何用Pandas根据另一DataFrame的列名筛选目标DataFrame的列?
实现方法与技巧指导
嘿,作为Pandas新手,这个需求其实非常好上手,我来给你一步步拆解实现思路和实用技巧~
核心实现逻辑
你的需求本质是根据指定的列名集合,从原DataFrame中筛选出对应列,核心步骤只有两步:
- 从df2中提取需要保留的列名,转成列表格式
- 用这个列表去索引原DataFrame df1,得到目标结果
具体代码
# 第一步:把df2里的列名提取成列表 cols_to_keep = df2[0].tolist() # 第二步:筛选df1的列,生成dfmain dfmain = df1[cols_to_keep]
运行这段代码后,你就能得到想要的dfmain了。
代码解释
df2[0]:因为df2是只有一列的DataFrame,列名是0,这行代码会取出这一列对应的Series(包含count和size两个值).tolist():把Series转换成普通的Python列表,这样就能直接用于Pandas的列索引df1[cols_to_keep]:Pandas支持直接用列名列表来筛选DataFrame的列,会自动返回只包含这些列的新DataFrame
实用优化技巧
如果想让代码更鲁棒(比如避免df2里出现df1没有的列导致报错),可以加一步列名校验:
# 只保留df1中存在的列名 cols_to_keep = [col for col in df2[0].tolist() if col in df1.columns] dfmain = df1[cols_to_keep]
另外,也可以用更明确的.loc语法来选列(效果和上面一样,但可读性更强):
dfmain = df1.loc[:, cols_to_keep]
这里的:表示保留所有行,后面的cols_to_keep指定要保留的列。
完整可运行示例
把所有代码放在一起,你可以直接复制运行测试:
import pandas as pd # 初始化df1 df1 = pd.DataFrame({ 'Color': ['Red', 'Blue'], 'count': [2, 1], 'size': ['med', 'large'], 'price': [5, 10] }) # 初始化df2 df2 = pd.DataFrame({0: ['count', 'size']}) # 提取目标列名并筛选 cols_to_keep = df2[0].tolist() dfmain = df1[cols_to_keep] # 打印结果 print(dfmain)
输出结果就是你想要的:
count size 0 2 med 1 1 large
内容的提问来源于stack exchange,提问作者lee.edward01
相关产品推荐
相关产品推荐

