У меня есть следующие фреймы данных:
Кадр данных 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 и не повезло. Кто-нибудь может мне помочь?
Для того, чтобы присоединиться к 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
left
соединение, так как это то, что буквально необходимо для OP. Кроме того, этот ответ кажется точным.