python - 如何有效地过滤通过双列 groupby 操作获得的数据帧以仅包含第二个索引的最大值和最小值?
问题描述
我有一个df
通过执行两列 groupby 操作获得的数据框:
df = data.groupby(['letters', 'syllables']).size()
这是前 11 行的输出df
:
0
letters syllables
1 1 25
3 1
2 1 188
2 44
3 1
4 1
3 1 1304
2 189
3 89
4 2
5 3
我想过滤df
,以便对于 中的每个索引letters
,只显示的最大和最小索引syllables
,给出以下输出:
0
letters syllables
1 1 25
3 1
2 1 188
4 1
3 1 1304
5 3
更好的是创建这样的数据框:
0
letters statistic syllables
1 min 1 25
max 3 1
2 min 1 188
max 4 1
3 min 1 1304
max 5 3
完整的数据框有 120 行。我知道我可以通过循环来做到这一点,但我正在努力更好地理解 pandas 的操作,并且想知道如何更有效地做到这一点。
可以使用以下方法将上述示例数据从 csv 文件导入到多级索引数据框中:
df = pd.read_csv('data.csv', index_col=[0,1])
编辑:这是 Erfan 建议的代码的输出:
df = data.groupby(['letters', 'syllables']).agg({'letters' : 'size', 'syllables' : ['min', 'max']})
输出:
letters syllables
size min max
letters syllables
1 1 25 1 1
3 1 3 3
2 1 188 1 1
2 44 2 2
3 1 3 3
4 1 4 4
3 1 1304 1 1
2 189 2 2
3 89 3 3
4 2 4 4
5 3 5 5
解决方案
你可以单独做,然后concat
再做
s=data.groupby(['letters', 'syllables']).size().sort_values(0)
yourdf=pd.concat([s.groupby(level=0).head(1),s.groupby(level=0).tail(1)],keys=['min','max']).swaplevel(i=0,j=1).sort_index()
推荐阅读
- r - 何时需要 dplyr rowwise 的操作复杂性?
- bash - snmpbulkget 并行导致发生错误
- shell - 可以从 IShellView 中检索 IShellFolder 吗?
- c# - Gridview:想要根据绑定的最终结果做某事
- python - Python Tkinter Canvas 有 2 个不同的 x 和 y 值
- c++ - 显示结构 C++ 成员的相同值
- javascript - 如何创建具有动态值的 c3 图?
- geocoding - 如何匹配不同年份的人口普查区
- javascript - 关于for循环内三元运算符的问题
- robotics - 使用 blueprism 窥探智能卡读卡器