Панды слияния и суммирования данных

1

У меня есть следующие фреймы данных:

Кадр данных 1:

ID1,ID2,VAL1,VAL2
CAR,RED,5,5
TRUCK,RED,6,6
CAR,BLUE,1,1

Кадр данных 2:

ID1,ID2,VAL1,VAL2
BIKE,RED,5,5
TRUCK,BLACK,6,6
CAR,RED,1,1

Я хочу оставить эти два кадра данных на ключе = {ID1, ID2}. Но я также хочу суммировать значения {VAL1, VAL2}. Так, например, выход будет:

ID1,ID2,VAL1,VAL2
CAR,RED,6,6
TRUCK,RED,6,6
CAR,BLUE,1,1

Я пробовал всевозможные комбинации pandas.merge и не повезло. Кто-нибудь может мне помочь?

Теги:
pandas
join
merge

1 ответ

2
Лучший ответ

Для того, чтобы присоединиться к dataframes в pandas использовать pd.merge. В данном случае соединение применяется к столбцам с похожими именами, поэтому достаточно перечислить список этих имен столбцов как on параметру:

merged = pd.merge(df_1, df_2, on=["ID1", "ID2"], how="left").fillna(0)

Затем вычислите необходимые столбцы, используя, например, df.assign:

merged = merged.assign(
    VAL1 = lambda x: x.VAL1_x + x.VAL1_y,
    VAL2 = lambda x: x.VAL2_x + x.VAL2_y)

Результат:

columns = df_1.columns 
merged[columns]

>>> ID1     ID2     VAL1    VAL2
0   CAR     RED     6.0     6.0
1   TRUCK   RED     6.0     6.0
2   CAR     BLUE    1.0     1.0
  • 1
    Я бы использовал left соединение, так как это то, что буквально необходимо для OP. Кроме того, этот ответ кажется точным.
  • 0
    @TomasFarias спасибо, не заметил
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню