У меня есть следующие кадры данных/CSV:
df1=
Person apple ball
A 3 4
B 5 1
df2=
Person apple cat
A 3 6
B 5 2
df3=
Person apple cat
C 6 2
D 2 2
df4=
Person dog cat
C 1 2
D 1 2
Мне интересно узнать самый быстрый способ объединить и добавить эти виды кадров данных без каких-либо дубликатов на основе 'Человек'. Ожидаемый результат выглядит так:
output=
Person apple ball cat dog
A 3 4 6 nan
B 5 1 2 nan
C 6 nan 2 1
D 2 nan 2 1
Если значения одного и того же столбца и индекса одинаковы во всех DataFrame
, возможно использование:
Это означает, например. для index=A
, column=apple
для каждого кадра данных одинаковое значение - здесь 3
(если существует)
dfs = [df1, df2, df3, df4]
#if Person is column, not index
dfs = [x.set_index('Person') for x in dfs]
df = pd.concat(dfs).groupby(level=0).first()
print (df)
apple ball cat dog
Person
A 3.0 4.0 6.0 NaN
B 5.0 1.0 2.0 NaN
C 6.0 NaN 2.0 1.0
D 2.0 NaN 2.0 1.0
Посмотрите, подходит ли это для вашего варианта использования, когда слияние выполняется как для столбцов, так и для меток индекса, и, наконец, объединяет результаты:
first = df1.merge(df2, on=["index", "apple"])
second = df3.merge(df4, on=["index", "cat"])
pd.concat([first, second])
apple ball cat dog
index
A 3 4 6 3
B 5 1 2 8
C 6 8 2 1
D 2 3 2 1
Проверьте эту ссылку