Python 熊猫的条件合并

Python 熊猫的条件合并,python,pandas,Python,Pandas,我有一个只包含名称的一列数据框: Names Matthew Mark Luke John 我还有大约10个包含更多数据的文件,还有一个名称列,其中一个文件是: Names Sum Random_data Matthew 200 x James 400 y some_guy 150 x Wilson 500 y 而另一个文件可以有: Names Sum Random_data Luke 800 x

我有一个只包含名称的一列数据框:

Names
Matthew
Mark
Luke
John
我还有大约10个包含更多数据的文件,还有一个名称列,其中一个文件是:

Names    Sum    Random_data
Matthew   200     x
James     400     y
some_guy  150     x
Wilson    500     y
而另一个文件可以有:

Names    Sum    Random_data
Luke      800     x
Bart      700     y
Sean      250     x
TOast     100     y
我希望10个文件中每个文件的“Sum”列的值作为新列合并到第一个文件中的相对行中。我想这可以通过在所有文件中循环搜索正确的“Name”行,然后将两个文件合并为数据帧来实现:

for data_file in all_files_that_have_data:

        data_df = pd.read_csv(data_file)
        df = df.merge(data_df, on='Name', how='left', suffixes=['','_remove'])
        cols = [c for c in df.columns if '_remove' not in c]
        df = df[cols]
        print(df.columns)

我的问题是,如何在每次执行合并时都不覆盖数据的情况下做到这一点。名称的正确数据可能在一个文件中,但在与下一个文件合并时会丢失。有没有办法有条件地合并每个文件,但仅在左侧数据框行的当前值为NaN时覆盖?

假设您从csv文件中只获得唯一的值,为什么不创建一个包含csv文件中所有值的数据框,然后进行合并

data_df = pd.DataFrame()

for data_file in all_files_that_have_data:
    data_df_temp = pd.read_csv(cpc_file)
    data_df = data_df.append(data_df_temp)

df = df.merge(data_df, on='Names', how='left')
print(df.columns)
我想你可以用+():


这就成功了!那时我所要做的就是过滤掉我不需要的专栏。谢谢
#create list of all DataFrames from csvs
dfs = [pd.read_csv(fp) for fp in all_files_that_have_data]
#concanecate them together
df_all = pd.concat(dfs, ignore_index=True)
#left join
df = pd.merge(df, df_all, how='left')
#alternatively
#df = df.join(df_all.set_index('Names'), on='Names')
print (df)
     Names    Sum Random_data
0  Matthew  200.0           x
1     Mark    NaN         NaN
2     Luke  800.0           x
3     John    NaN         NaN