#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Мой первый фрейм данных:
df1 =
A B
61880 7
62646 8
62651 9
62656 10
62783 11
Мой второй фрейм данных:
df2 =
C D
62783 2
62646 3
61880 4
62656 5
62651 6
Как вы можете видеть как в первом, так и во втором фрейме данных, у нас есть столбцы с одинаковыми значениями, расположенными не в том же порядке (!) (col A and col C)
Желаемый результат: возьмите все значения «B» и «D» из строк, которые имеют одинаковые значения «A» и «C», и выполните с ними математическую операцию (например, B, деленное на D).
Пример: 2 11 (оба они имеют одинаковое значение 62783 в столбцах «A» и «C»)
ДОПОЛНЕНИЕ! ОТРЕДАКТИРОВАНО!
Большое спасибо! Я столкнулся с другой проблемой, о которой забыл упомянуть:
Иногда в столбце «A» у меня одинаковые значения, например, мы можем видеть «61880» дважды и так далее:
df1 =
A B
*61880* 7
**62646** 8
62651 9
62656 10
62783 11
*61880* 3
**62646** 2
Я хочу выполнить тот же процесс, о котором вы упомянули, НО с учетом следующего:
Я хочу отсортировать столбец «A» на основе значений «B», а именно суммы «B». Что-то вроде:
61880 7 3
62646 8 2
...
Я сделал это с data.groupby('mm_fid')['vel'].sum()
полученным результатом, но после этого я не могу выполнить операцию. Таким образом, я хочу создать уникальный столбец с суммой «B», а затем перейти к предоставленным вами ответам!
Ответ №1:
Вам нужно merge
, затем просто добавьте соответствующие значения:
res = df1.merge(df2, left_on='A', right_on='C')
(res.B res.D).to_frame('result').set_index(res.A)
result
A
61880 15
62646 14
62651 21
62656 20
62783 15
Ответ №2:
Я считаю, что вам нужно DataFrame.add
с DataFrame.set_index
:
df3 = df1.set_index('A')['B'].add(df2.set_index('C')['D'], fill_value=0).reset_index()
df3.columns = ['A','B']
print (df3)
A B
0 61880 11
1 62646 11
2 62651 15
3 62656 15
4 62783 13
Другим решением является использование concat
с aggregate sum
:
d = {'C':'A', 'D':'B'}
df3 = pd.concat([df1, df2.rename(columns=d)]).groupby('A', as_index=False)['B'].sum()
print (df3)
A B
0 61880 11
1 62646 11
2 62651 15
3 62656 15
4 62783 13