You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定列匹配合并顺序不一致的DataFrame并自定义列顺序

解决方案

可以通过以下步骤实现需求:

  1. 为df生成匹配用的formula列
    从filename列中去除.cif后缀,生成和df2格式一致的formula列:

    import pandas as pd
    
    # 示例数据
    df = pd.DataFrame({'filename': ['Fe12Co4BN.cif', 'Fe16N2.cif', 'Fe15CoBN.cif'],
                       'jml_bp_mult_atom_rad': [170.11, 154.73, 172.43],
                       'jml_hfus_add_bp': [45.13, 41.90, 47.23]})
    
    df2 = pd.DataFrame({'formula': ['Fe12Co4BN','Fe15CoBN','Fe16N2'],
                        'nsites': [8, 8, 8],
                        'number': [139, 139, 140]})
    
    # 生成匹配列
    df['formula'] = df['filename'].str.replace('.cif', '', regex=False)
    
  2. 合并两个DataFrame
    以formula为键进行合并,确保保留df2的行顺序:

    merged_df = pd.merge(df2, df.drop(columns='filename'), on='formula', how='left')
    
  3. 调整列顺序
    按照要求排列列:

    # 定义列顺序:formula + df的非filename列 + df2的非formula列
    column_order = ['formula'] + [col for col in df.columns if col != 'filename'] + [col for col in df2.columns if col != 'formula']
    df3 = merged_df[column_order]
    

执行后得到的df3与期望结果一致:

print(df3)
# 输出:
#        formula  jml_bp_mult_atom_rad  jml_hfus_add_bp  nsites  number
# 0  Fe12Co4BN                  170.11            45.13       8     139
# 1   Fe15CoBN                  172.43            47.23       8     139
# 2     Fe16N2                  154.73            41.90       8     140

内容的提问来源于stack exchange,提问作者J0chin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:50:26