python - 如何解决'列标签'Avg_Threat_Score'不是唯一的。'?熊猫的问题
问题描述
运行代码时,我面临以下错误。错误 - 列标签“Avg_Threat_Score”不是唯一的。
我正在创建一个数据透视表,并希望将值从高到低排序。
pt = df.pivot_table(index = 'User Name',values = ['Threat Score', 'Score'],
aggfunc = {
'Threat Score': np.mean,
'Score' :[np.mean, lambda x: len(x.dropna())]
},
margins = False)
new_col =['User Name Count', 'AVG_TH_Score', 'Avg_Threat_Score']
pt.columns = [new_col]
#befor this code is working, after that now working
df = df.reindex(pt.sort_values
(by = 'Avg_Threat_Score',ascending=False).index)
需要对列“Avg_Threat_Score”的高低值进行排序
解决方案
您需要通过列表而不是嵌套列表传递新列名称,因为熊猫创建MultiIndex
一个级别。
new_col =['User Name Count', 'AVG_TH_Score', 'Avg_Threat_Score']
pt.columns = [new_col]
是一样的:
pt.columns = [['User Name Count', 'AVG_TH_Score', 'Avg_Threat_Score']]
ValueError:列标签“Avg_Threat_Score”不是唯一的。
对于多索引,标签必须是一个元组,其中包含对应于每个级别的元素。
所以使用:
pt.columns = ['User Name Count', 'AVG_TH_Score', 'Avg_Threat_Score']
样品:
df = pd.DataFrame({
'User Name':list('ababaa'),
'Threat Score':[4,5,4,np.nan,5,4],
'Score':[np.nan,8,9,4,2,np.nan],
'D':[1,3,5,7,1,0]})
pt = (df.pivot_table(index = 'User Name',values = ['Threat Score', 'Score'],
aggfunc = {
'Threat Score': np.mean,
'Score' :[np.mean, lambda x: len(x.dropna())]
},
margins = False))
pt.columns = ['User Name Count', 'AVG_TH_Score', 'Avg_Threat_Score']
print (pt)
User Name Count AVG_TH_Score Avg_Threat_Score
User Name
a 2.0 5.5 4.25
b 2.0 6.0 5.00
Avg_Threat_Score
然后通过使用 order Categorical
for column进行排序User Name
,所以最后sort_values
工作:
names = pt.sort_values(by = 'Avg_Threat_Score',ascending=False).index
print (names)
#Index(['b', 'a'], dtype='object', name='User Name')
df['User Name'] = pd.CategoricalIndex(df['User Name'], categories=names, ordered=True)
df = df.sort_values('User Name')
print (df)
User Name Threat Score Score D
1 b 5.0 8.0 3
3 b NaN 4.0 7
0 a 4.0 NaN 1
2 a 4.0 9.0 5
4 a 5.0 2.0 1
5 a 4.0 NaN 0
推荐阅读
- python - 使用远程SSH扩展时的python全局模块安装
- javascript - 如何使用 ng-material-treetable 更改列宽?
- aws-application-load-balancer - 为什么无法在没有自定义域(及其 TLS 证书)的情况下使用 HTTPS 侦听器创建 ALB?
- azure - 使用授权代码流在@azure/msal-node 中未返回刷新令牌?
- macos - 为 2012 年中的 MacBook Air 制作 Windows10 可启动媒体
- python - page_source 打印上一个登录页面 html,尽管浏览器显示使用 Selenium 和 Python 成功登录
- javascript - 反应一个状态数据自动变化
- javascript - Javascript 将数据表导出到 csv 但想要包含表头并排除三列
- python - 如何根据另一个表的检查替换熊猫数据框中列中的值
- sql-server - 如果 where 子句匹配,则获取最后一个对应条目并匹配