pandas变形

交叉表是一种特殊的透视表,典型的用途如分组统计,如现在想要统计关于街道和性别分组的频数:

print(pd.crosstab(index=df['Address'],columns=df['Gender']))

交叉表的功能也很强大(但目前还不支持多级分组),下面说明一些重要参数:
① values和aggfunc:分组对某些数据进行聚合操作,这两个参数必须成对出现。默认参数等于如下方法:pd.crosstab(index=df[‘Address’],columns=df[‘Gender’],values=1,aggfunc=‘count’)
② 除了边际参数margins外,还引入了normalize参数,可选’all’,‘index’,'columns’参数值

print(pd.crosstab(index=df['Address'],columns=df['Gender']))
print(pd.crosstab(index=df['Address'],columns=df['Gender'],
            values=np.random.randint(1,20,df.shape[0]),aggfunc='min'))
print(pd.crosstab(index=df['Address'],columns=df['Gender'],normalize='all',margins=True))
Gender    F  M
Address       
street_1  1  2
street_2  4  2
street_4  3  5
street_5  3  3
street_6  5  1
street_7  3  3
Gender    F   M
Address        
street_1  6   1
street_2  5   7
street_4  1   3
street_5  9   2
street_6  1  10
street_7  2  12
Gender           F         M       All
Address                               
street_1  0.028571  0.057143  0.085714
street_2  0.114286  0.057143  0.171429
street_4  0.085714  0.142857  0.228571
street_5  0.085714  0.085714  0.171429
street_6  0.142857  0.028571  0.171429
street_7  0.085714  0.085714  0.171429
All       0.542857  0.457143  1.000000


三、melt函数
melt函数可以认为是pivot函数的逆操作,将unstacked状态的数据,压缩成stacked,使“宽”的DataFrame变“窄”。
melt函数中的id_vars表示需要保留的列,value_vars表示需要stack的一组列。

```python
df_m = df[['ID','Gender','Math']]
print(df_m.head())
pivoted = df.pivot(index='ID',columns='Gender',values='Math')
result = pivoted.reset_index().melt(id_vars=['ID'],value_vars=['F','M'],value_name='Math').dropna().set_index('ID').sort_index()
print(result.head())
 ID Gender  Math
0  1101      M  34.0
1  1102      F  32.5
2  1103      M  87.2
3  1104      F  80.4
4  1105      F  84.8
     Gender  Math
ID               
1101      M  34.0
1102      F  32.5
1103      M  87.2
1104      F  80.4
1105      F  84.8
True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值