数据聚合与分组操作-数据透视表
import numpy as np
import pandas as pd
tips = pd.DataFrame({\'total_bill\':np.arange(50,70),
\'tip\':np.arange(20,40),
\'smoker\':[\'Yes\',\'No\',\'Yes\']*6+[\'No\',\'No\'],
\'day\':[\'Fri\',\'Sun\',\'Thu\',\'Sat\']*5,
\'time\':[\'Lunch\',\'Dinner\']*10,
\'size\':np.arange(1,21),
\'tip_pct\':np.random.rand(20)})
tips
tips.pivot_table(index=[\'day\',\'smoker\']) # 默认取平均值
| size | tip | tip_pct | total_bill | ||
|---|---|---|---|---|---|
| day | smoker | ||||
| Fri | No | 11.000000 | 30.000000 | 0.330234 | 60.000000 |
| Yes | 7.666667 | 26.666667 | 0.506731 | 56.666667 | |
| Sat | No | 14.000000 | 33.000000 | 0.406182 | 63.000000 |
| Yes | 10.666667 | 29.666667 | 0.499115 | 59.666667 | |
| Sun | No | 8.000000 | 27.000000 | 0.356128 | 57.000000 |
| Yes | 11.333333 | 30.333333 | 0.725151 | 60.333333 | |
| Thu | No | 15.000000 | 34.000000 | 0.826657 | 64.000000 |
| Yes | 8.333333 | 27.333333 | 0.517562 | 57.333333 |
tips.groupby([\'day\',\'smoker\']).mean() # 与上句同效果
| size | tip | tip_pct | total_bill | ||
|---|---|---|---|---|---|
| day | smoker | ||||
| Fri | No | 11.000000 | 30.000000 | 0.330234 | 60.000000 |
| Yes | 7.666667 | 26.666667 | 0.506731 | 56.666667 | |
| Sat | No | 14.000000 | 33.000000 | 0.406182 | 63.000000 |
| Yes | 10.666667 | 29.666667 | 0.499115 | 59.666667 | |
| Sun | No | 8.000000 | 27.000000 | 0.356128 | 57.000000 |
| Yes | 11.333333 | 30.333333 | 0.725151 | 60.333333 | |
| Thu | No | 15.000000 | 34.000000 | 0.826657 | 64.000000 |
| Yes | 8.333333 | 27.333333 | 0.517562 | 57.333333 |
tips.pivot_table(\'tip_pct\',index=[\'time\',\'smoker\'],columns=\'day\',
aggfunc=len,margins=True)
| day | Fri | Sat | Sun | Thu | All | |
|---|---|---|---|---|---|---|
| time | smoker | |||||
| Dinner | No | NaN | 2.0 | 2.0 | NaN | 4.0 |
| Yes | NaN | 3.0 | 3.0 | NaN | 6.0 | |
| Lunch | No | 2.0 | NaN | NaN | 2.0 | 4.0 |
| Yes | 3.0 | NaN | NaN | 3.0 | 6.0 | |
| All | 5.0 | 5.0 | 5.0 | 5.0 | 20.0 |
tips.pivot_table(\'tip_pct\',index=[\'time\',\'smoker\'],columns=\'day\',
aggfunc=\'count\',margins=True) # 集成函数写成\'count\',与上句同效果
| day | Fri | Sat | Sun | Thu | All | |
|---|---|---|---|---|---|---|
| time | smoker | |||||
| Dinner | No | NaN | 2.0 | 2.0 | NaN | 4.0 |
| Yes | NaN | 3.0 | 3.0 | NaN | 6.0 | |
| Lunch | No | 2.0 | NaN | NaN | 2.0 | 4.0 |
| Yes | 3.0 | NaN | NaN | 3.0 | 6.0 | |
| All | 5.0 | 5.0 | 5.0 | 5.0 | 20.0 |