Агрегирование данных с помощью pandas python - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть следующие данные, аналогичные приведенным ниже:

Таблица 1

Colour  Make
Red     Ford
Blue    BMW
Blue    BMW
Green   Golf
Yellow  Audi
Yellow  Audi
Yellow  Audi

Таблица 2

Colour  Make    Count
Green   Ford    5
Blue    BMW     1
Green   Golf    6
Orange  BMW     1

Я бы хотел использовать панд для агрегирования данных в таблице 1, а затем либо увеличить счетчик в таблице 2, если он уже существует, либо вставить новую запись, если она не существует.Из приведенных выше примеров:

Результирующая таблица:

Colour  Make    Count
Green   Ford    5
Blue    BMW     3
Green   Golf    7
Orange  BMW     1
Red     Ford    1
Yellow  Audi    3

Чтобы выполнить первый шаг агрегирования, у меня есть:

df1.groupby(["Colour", "Make"]).size()reset_index(name="Count")

ОднакоЯ не уверен, как подойти ко второму шагу.Я склонен выбирать какое-то решение на основе петель, но я читал, что это нет-нет.

Какой самый подходящий способ попасть в таблицу результатов?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы можете выровнять индексы и структуру, затем использовать pd.DataFrame.add с fill_value=0.

res = df1.groupby(['Colour', 'Make']).size().to_frame('Count')\
         .add(df2.set_index(['Colour', 'Make']), fill_value=0)\
         .astype(int).reset_index()

print(res)

   Colour  Make  Count
0    Blue   BMW      3
1   Green  Ford      5
2   Green  Golf      7
3  Orange   BMW      1
4     Red  Ford      1
5  Yellow  Audi      3
0 голосов
/ 19 декабря 2018

Использование concat с groupby size

pd.concat([df1.assign(Count=1),df2]).groupby(['Colour','Make']).Count.sum().reset_index()
Out[127]: 
   Colour  Make  Count
0    Blue   BMW      3
1   Green  Ford      5
2   Green  Golf      7#check you expected output at this line 
3  Orange   BMW      1
4     Red  Ford      1
5  Yellow  Audi      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...