如何按指定列匹配合并顺序不一致的DataFrame并自定义列顺序
解决方案
可以通过以下步骤实现需求:
为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)合并两个DataFrame
以formula为键进行合并,确保保留df2的行顺序:merged_df = pd.merge(df2, df.drop(columns='filename'), on='formula', how='left')调整列顺序
按照要求排列列:# 定义列顺序: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
相关产品推荐
相关产品推荐

