如何解决python pandas数据表的数值范围数据透视表
您好,我想根据数据表制作数据透视表,该数据表根据公司在网站上的上传次数列出这些公司。这是我所拥有的:
df
Company Uploads
Nike 11
Adidas 26
Apple 55
Tesla 3
Amazon 97
Ralph Lauren 54
Tiffany 19
Walmart 77
Target 18
Facebook 48
Google 81
所需的输出
Range Company Uploads
>10 Tesla 3
11-50 Adidas 26
Tiffany 19
Target 18
Nike 11
51-100 Amazon 97
Google 81
Walmart 77
Apple 55
Ralph Lauren 54
我正在考虑使用np.where在df中添加“范围”列。然后使用pd.pivot_table或.groupby创建数据透视表。然后是.sort_value作为数据透视表中的降序上传编号。
我不确定这是否行得通。谁能帮我这个忙吗?感谢您的协助。预先感谢!
解决方法
您可以使用具有分级功能的pd.cut()
来对段进行分类,并使用标签输出的名称。
import pandas as pd
import numpy as np
import io
data = '''
Company Uploads
Nike 11
Adidas 26
Apple 55
Tesla 3
Amazon 97
"Ralph Lauren" 54
Tiffany 19
Walmart 77
Target 18
Facebook 48
Google 81
'''
df = pd.read_csv(io.StringIO(data),sep='\s+')
df['category'] = pd.cut(df['Uploads'],[0,10,50,100],labels=['>10','11-50','51-100'])
df.sort_values(['category','Uploads'],ascending=[True,True],inplace=True)
df.set_index(['category','Company'],inplace=True)
df
Uploads
category Company
>10 Tesla 3
11-50 Nike 11
Target 18
Tiffany 19
Adidas 26
Facebook 48
51-100 Ralph Lauren 54
Apple 55
Walmart 77
Google 81
Amazon 97
,
您想要的是MultiIndex而不是groupby()
首先创建一列,按照您的建议对您的上传进行分类:
df = df.sort_values('Uploads',ascending=False)
df['Range'] = np.digitize(df['Uploads'],11,51,100]) #bins <=10,11-50,50-100
#only handles up to 100,if there are values above 100 you need to expand that second list
现在,我们将bin的结果值映射到更具描述性的字符串
df = df.sort_values('Range')
key_range = np.vectorize(lambda x: {1:'<10',2:'11-50',3:'51-100'}[x])
df['Range'] = k(df['Range'])
创建multiIndex以获取所需的df
df.set_index(['Range','Company'])
输出:
Uploads
Range Company
<10 Tesla 3
11-50 Facebook 48
Adidas 26
Tiffany 19
Target 18
Nike 11
51-100 Amazon 97
Google 81
Walmart 77
Apple 55
Ralph 54
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。