Математические операции столбца, основанные на тех же значениях других панд столбца - PullRequest
1 голос
/ 18 апреля 2019

Мой первый фрейм данных:

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 в столбцах «А» и «С»)

Сложение! Редакция!

Большое спасибо! Я столкнулся с другой проблемой, которую я забыл упомянуть:

Иногда в столбце «А» у меня одни и те же значения, например, мы можем видеть «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», а затем продолжить с ответами, которые вы предоставили!

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

Вам нужно 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
1 голос
/ 18 апреля 2019

Я считаю, что вам нужно 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 ссовокупность 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...