Я хочу создать сводную таблицу на основе пользовательских условий в кадре данных:
Фрейм данных выглядит следующим образом:
>>> df = pd.DataFrame({"Area": ["A", "A", "B", "A", "C", "A", "D", "A"],
"City" : ["X", "Y", "Z", "P", "Q", "R", "S", "X"],
"Condition" : ["Good", "Bad", "Good", "Good", "Good", "Bad", "Good", "Good"],
"Population" : [100,150,50,200,170,390,80,100]
"Pincode" : ["X1", "Y1", "Z1", "P1", "Q1", "R1", "S1", "X2"] })
>>> df
Area City Condition Population Pincode
0 A X Good 100 X1
1 A Y Bad 150 Y1
2 B Z Good 50 Z1
3 A P Good 200 P1
4 C Q Good 170 Q1
5 A R Bad 390 R1
6 D S Good 80 S1
7 A X Good 100 X2
Теперь я хочу повернуть фрейм данных df
таким образом, чтобы я мог видеть уникальное количество городов для каждой области вместе с соответствующим количеством "хороших" городов, а также население области.
Я ожидаю такой вывод:
Area city_count good_city_count Population
A 4 2 940
B 1 1 50
C 1 1 170
D 1 1 80
All 7 5 1240
Я могу дать словарь для параметра aggfunc
, но это не дает мне разбить количество городов между хорошими городами.
>>> city_count = df.pivot_table(index=["Area"],
values=["City", "Population"],
aggfunc={"City": lambda x: len(x.unique()),
"Population": "sum"},
margins=True)
Area City Population
0 A 4 940
1 B 1 50
2 C 1 170
3 D 1 80
4 All 7 1240
Я могу объединить две разные сводные таблицы - одну с количеством городов, а другую с населением, но это невозможно масштабировать для большого набора данных с большим aggfunc
словарем.