Python的值等于特定列的简单函数

Python的值等于特定列的简单函数,python,pandas,pivot,Python,Pandas,Pivot,我可以旋转数据帧以获得一些聚合值 import pandas as pd olympics = pd.read_csv('olympics.csv') Edition NOC Medal 0 1896 AUT Silver 1 1896 FRA Gold 2 1896 GER Gold 3 1900 HUN Bronze 4 1900 GBR Gold 5 1900 DEN Bronz

我可以旋转数据帧以获得一些聚合值

import pandas as pd
olympics = pd.read_csv('olympics.csv')

    Edition  NOC   Medal
0      1896  AUT  Silver
1      1896  FRA    Gold
2      1896  GER    Gold
3      1900  HUN  Bronze
4      1900  GBR    Gold
5      1900  DEN  Bronze
6      1900  USA    Gold
7      1900  FRA  Bronze
8      1900  FRA  Silver
9      1900  USA    Gold
10     1900  FRA  Silver
11     1900  GBR    Gold
12     1900  SUI  Silver
13     1900  ZZX    Gold
14     1904  HUN    Gold
15     1904  USA  Bronze
16     1904  USA    Gold
17     1904  USA  Silver
18     1904  CAN    Gold
19     1904  USA  Silver
我不想得到奖牌总数=,而是想得到一个元组(一个三元组),其中有(#金、#银、#铜),(0,0,0)代表NaN

我如何简洁优雅地做到这一点

无需使用pivot_表,因为pivot与值的元组完美结合

  • value\u计数
    计数所有奖牌
  • 为国家、日期和奖牌的所有组合创建多索引
  • reindex
    带有
    fill\u值=0

pivot = olympics.pivot_table(index='Edition', columns='NOC', values='Medal', aggfunc='count')

NOC      AUT  CAN  DEN  FRA  GBR  GER  HUN  SUI  USA  ZZX
Edition                                                  
1896     1.0  NaN  NaN  1.0  NaN  1.0  NaN  NaN  NaN  NaN
1900     NaN  NaN  1.0  3.0  2.0  NaN  1.0  1.0  2.0  1.0
1904     NaN  1.0  NaN  NaN  NaN  NaN  1.0  NaN  4.0  NaN
counts = df.groupby(['Edition', 'NOC']).Medal.value_counts()

mux = pd.MultiIndex.from_product(
    [c.values for c in counts.index.levels], names=counts.index.names)
counts = counts.reindex(mux, fill_value=0).unstack('Medal')
counts = counts[['Bronze', 'Silver', 'Gold']]

pd.Series([tuple(l) for l in counts.values.tolist()], counts.index).unstack()