我有一个数据帧df
,该数据帧是通过执行两列groupby操作获得的:
df = data.groupby(['letters', 'syllables']).size()
以下是df
的前11行的输出:
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行。我知道我可以循环执行此操作,但是我试图更好地了解熊猫的操作,并想知道如何更有效地执行此操作。
可以使用以下命令将以上示例数据从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
答案 0 :(得分:1)
您可以单独进行操作,然后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()