微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 透视数据熊猫

我正试图转动这些数据:

         ID
UserID
1        a1
1        a2
2        a1
2        a3

进入如下数据框:

UserID   a1   a2   a3
1        1    1    0
2        1    0    1

我尝试过以下df = pd.pivot_table(df,index =’UserID’,columns =’ID’,但它给我一个DataError:没有数字类型来聚合错误.我该怎么办?

解决方法:

第一列是索引,因此必须将index =’UserID’更改为index = df.index.

聚合函数也是GroupBy.size

df = pd.pivot_table(df, index=df.index, columns=df['ID'], aggfunc='size', fill_value=0)
print (df)
ID      a1  a2  a3
UserID            
1        1   1   0
2        1   0   1

解决方crosstab

df = pd.crosstab(df.index,df['ID'])
print (df)
ID     a1  a2  a3
row_0            
1       1   1   0
2       1   0   1

或者(pandas 0.20.1+)解决方案 – groupby按索引和列一起,聚合大小并重新调整到unstack

df = df.groupby(['UserID','ID']).size().unstack(fill_value=0)
print (df)
ID      a1  a2  a3
UserID            
1        1   1   0
2        1   0   1

pandas bellow 0.20.1解决方案 – 在reset_index之前将索引转换为列:

df = df.reset_index().groupby(['UserID','ID']).size().unstack(fill_value=0)
print (df)
ID      a1  a2  a3
UserID            
1        1   1   0
2        1   0   1

编辑:

似乎索引也可以通过索引名称选择(不确定它是否适用于0.20.1):

df = pd.pivot_table(df, index='UserID', columns='ID', aggfunc='size', fill_value=0)
print (df)
ID      a1  a2  a3
UserID            
1        1   1   0
2        1   0   1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐