python - 如何创建根据组大小排序的多索引数据框?
问题描述
我确实有这样的数据框:
df = pd.DataFrame({
'IDs': list('abcdefgh'),
'Val': [
'foo', 'bar', 'foo', 'abc', 'bar', 'bar', 'foo', 'foo'
]
})
IDs Val
0 a foo
1 b bar
2 c foo
3 d abc
4 e bar
5 f bar
6 g foo
7 h foo
我现在想得到这样的输出:
Val IDs
foo a
c
g
h
bar b
e
f
abc d
因此,它是一个多索引数据帧的索引,size
根据Val
.
我目前这样做:
df['groupsize'] = df.groupby('Val')['IDs'].transform('size')
df = (
df.sort_values(['groupsize', 'Val', 'IDs'], ascending=[False, True, True])
.drop('groupsize', axis=1)
.set_index(['Val', 'IDs'])
)
df.to_excel('example.xlsx', merge_cells=True)
这给出了所需的输出。
有没有办法实现相同的输出,但不创建这个groupsize
稍后会被删除的中间列?
解决方案
您可以使用np.argsort
andiloc
来避免冗长sort_values
s = np.argsort(-df.groupby('Val')['IDs'].transform('size'))
df.iloc[s].set_index(['Val', 'IDs'])
Val IDs
foo a
c
g
h
bar b
e
f
abc d
推荐阅读
- visualization - 张量板中的线图
- azure - 在登录时部署 Azure 工业物联网
- symfony - 使用 Symfony 序列化器组件时在反序列化期间处理不正确的数据
- java - Gradle:在我自己的任务中从导入的插件调用任务
- software-design - 允许的最大线性独立圈复杂度指南?
- python - Python 正则表达式语句错误
- php - 从 PHP 生成 Postman 预览
- react-native - 如何将响应传递给 react-native RNPickerSelect 功能组件
- filter - GroupBy 函数不在 PowerApps 中显示图库磁贴
- amazon-ec2 - DBeaver 通过 SSH 隧道连接