Допустим, я создаю DataFrame:Панды объединить агрегированные столбцов
import pandas as pd
df = pd.DataFrame({"a": [1,2,3,13,15], "b": [4,5,6,6,6], "c": ["wish", "you","were", "here", "here"]})
так:
a b c
0 1 4 wish
1 2 5 you
2 3 6 were
3 13 6 here
4 15 6 here
..., а затем группы и совокупный на пару колонок ...
gb = df.groupby(['b','c']).agg({"a": lambda x: x.nunique()})
Получение следующего результата:
a
b c
4 wish 1
5 you 1
6 here 2
were 1
Можно ли объединить df
с новой агрегированной таблицей gb
, чтобы создать новый столбец в df, содержащий соответствующие значения от gb
? Как это:
a b c nc
0 1 4 wish 1
1 2 5 you 1
2 3 6 were 1
3 13 6 here 2
4 15 6 here 2
Я пытался делать простейшую вещь:
df.merge(gb, on=['b','c'])
Но это дает ошибку:
KeyError: 'b'
Который имеет смысл, поскольку сгруппированная таблица имеет многоиндексную и b
не является столбцом. Так что мой вопрос два раза:
- Могу ли я превратить мульти-индекс
gb
DataFrame обратно в колонны (так, что она имеет столбецb
иc
)? - Могу ли я объединить
df
сgb
на имена столбцов?
Это великолепно. Гораздо более элегантный, чем мое решение. –
Согласовано - ответ @ aus_lacy отвечает на вопрос OP, но это еще лучший способ сделать это. –
мы можем сделать это на нескольких операциях: count/sum/etc ... с автоматическими новыми столбцами для каждой операции? –