Итерация по слиянию нескольких фреймов данных - PullRequest
0 голосов
/ 02 августа 2020
• 1000 выровняйте их со значениями в столбце CAS фрейма основных данных.

Пример кадра основных данных

Master Dataframe

Example Data Frame 1:

Dataframe1

Example Data Frame 2:

[Dataframe2]

ACTUAL DATA

Master DataFrameMaster Dataframe

DataFrame1DataFrame1

DataFrame2 DataFrame2

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Решение 1: Используйте столбец if 'value' только в df1 и df2, но не df_master.

dfcon = pd.concat([df1, df2])
df = pd.merge(df_master, dfcon, how='left', on='CAS')

Решение 2: Используйте, если столбец 'value' также находится в df_master.

df_master_drop = df_master.drop(columns=['value'])
df_drop = pd.merge(df_master_drop, dfcon, how='left', on='CAS')
df = df_master.combine_first(df_drop)

Примечания: Используйте dfcon = pd.concat ([df1, df2]). Drop_duplicates ('CAS'), если есть дубликаты. Это сохранит самое раннее значение CAS.

0 голосов
/ 02 августа 2020

Изменить: изменен код для включения основных элементов без совпадений в любом df

Кажется, простая конкатенация выполнит эту работу (если в мастере нет дополнительных данных, которые вы хотите сохранить ):

result = (
    pd.concat(dataframes.append(master_df), axis=0,
        keys=[f'df{i}' for i in range(1, len(dataframes)+1)], names=['source'])
    .sort_values('CAS')
    )
    

Параметр keys не обязателен, и вы его точно не просили. Я включил его, потому что он часто бывает полезен. Он добавит уровень к индексу в результате df, чтобы вы могли отслеживать источник или выполнять групповой анализ.

...