更改 pandas 系列中的多索引?

Changing multiindex in a pandas series?

我有一个这样的数据框:

mainid  pidl       pidw   score
  0     Austria    1      533
  1     Canada     2      754
  2     Canada     3      267
  3     Austria    4      852
  4     Taiwan     5      124
  5     Slovakia   6      344
  6     Spain      7      1556
  7     Taiwan     8      127

我想 select 每个 pidl 的前 5 个 pidw。 当我按 'pidl' 列分组,然后按每组中的降序对分数进行排序时,我得到以下系列,s..

s= df.set_index(['pidl', 'pidw']).groupby('pidl')['score'].nlargest(5)

pidl      pidl      pidw     score
Austria   Austria   49       948
                    47       859
                    48       855
                    50       807
                    46       727
Belgium   Belgium   15      2339
                    14      1861
                    45      1692
                    16      1626
                    46      1423

Name: score, dtype: float64

结果看起来是正确的,但我希望我能从这个系列中删除第二个 'pidl'。

我试过了

s.reset_index('pidl') 

得到'ValueError: The name location occurs multiple times, use a level number'.

s.to_frame().reset_index()

ValueError: 无法插入 pidl,已经存在。

所以我不确定如何进行。

DataFrame.groupby中使用group_keys=False参数:

s= df.set_index(['pidl', 'pidw']).groupby('pidl', group_keys=False)['score'].nlargest(5)
print (s)
pidl      pidw
Austria   4        852
          1        533
Canada    2        754
          3        267
Slovakia  6        344
Spain     7       1556
Taiwan    8        127
          5        124
Name: score, dtype: int64

或添加 Series.droplevel 以删除第一级(pandas 从 0 开始计算,因此使用 0):

s= df.set_index(['pidl', 'pidw']).groupby('pidl')['score'].nlargest(5).droplevel(0)