Сложить или вычесть значения некоторых столбцов двух Pandas DataFrame
есть два Pandas DataFrame вида:
d1 = [{'account': 'Alex', 'Jan': 1, 'Feb': 4, 'Mar': 7, 'idx': 1},
{'account': 'Bob', 'Jan': 2, 'Feb': 5, 'Mar': 8, 'idx': 2},
{'account': 'Den', 'Jan': 3, 'Feb': 6, 'Mar': 9, 'idx': 3 }]
d2 = [{'account': 'Alex', 'Jan': 10, 'Feb': 14, 'Mar': 21, 'idx': 1},
{'account': 'Alex', 'Jan': 11, 'Feb': 15, 'Mar': 20, 'idx': 2},
{'account': 'Bob', 'Jan': 12, 'Feb': 16, 'Mar': 19, 'idx': 2},
{'account': 'Den', 'Jan': 13, 'Feb': 17, 'Mar': 18, 'idx': 3 }]
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)
Нужно из них получить df3 и df4 с такой же структурой столбцов, чтобы в них были только совпадающие одновременно по обоим столбцам 'account' и 'idx' строки из первых двух датафреймов, при этом числовые значения из остальных столбцов были равны сумме соответствующих значений из df1 и df2 для df3, и разности их же для df4.
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
При ваших исходных:
df3 = df1.set_index(['account', 'idx']).add(df2.set_index(['account', 'idx'])).dropna().reset_index()
df4 = df1.set_index(['account', 'idx']).sub(df2.set_index(['account', 'idx'])).dropna().reset_index()
Тогда df3 будет:
account idx Jan Feb Mar
0 Alex 1 11.0 18.0 28.0
1 Bob 2 14.0 21.0 27.0
2 Den 3 16.0 23.0 27.0
а df4, соответственно:
account idx Jan Feb Mar
0 Alex 1 -9.0 -10.0 -14.0
1 Bob 2 -10.0 -11.0 -11.0
2 Den 3 -10.0 -11.0 -9.0