pandas 不按字母顺序连接多个 Dataframe 的列

1l5u6lss  于 2023-04-04  发布在  其他
关注(0)|答案(1)|浏览(133)

我想连接来自多个 Dataframe 的列。这个想法是,有一些值是匹配的,有些不是来自这些列。我希望它按字母顺序排列,并且它是一个完整的外部连接,其中所有值都连接,如果两列的值匹配,将在同一行排序,如果不是,一行将被添加到另一列中,其值为N/A。
我试过这个
allnames = pd.concat(lstnames,axis=1,ignore_index=True,join='outer',sort=False)
但它返回以下内容:

注意它不是按字母顺序排列的。如何解决这个问题?

v6ylcynt

v6ylcynt1#

当前方法的问题是pd.concat连接列时没有考虑index作为合并键。要实现所需的输出,可以将pd.mergehow='outer'一起使用,然后对结果DataFrame进行排序。
假设你有两个 Dataframe ,df1和df2:

import pandas as pd

data1 = {'Names': ['Alice', 'Bob', 'Cathy']}
data2 = {'Names': ['David', 'Bob', 'Eva']}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

一种方法可以是使用将合并 Dataframe 上的值的自定义函数。

def merge_dataframes(df_list, column_name):
merged_df = pd.DataFrame()

for df in df_list:
    df[column_name] = df[column_name].astype(str)
    df = df.set_index(column_name)
    
    if merged_df.empty:
        merged_df = df
    else:
        merged_df = merged_df.combine_first(df)

merged_df = merged_df.reset_index()
merged_df = merged_df.sort_values(by=column_name)
merged_df = merged_df.reset_index(drop=True)
return merged_df

立即使用该功能

merged_df = merge_dataframes([df1, df2], 'Names')

这个应该可以了。

相关问题