gpt4 book ai didi

python - 显示多索引 Pandas 数据框的前 10 行

转载 作者:太空狗 更新时间:2023-10-30 02:43:38 26 4
gpt4 key购买 nike

我有一个多级索引 pandas DataFrame,其中第一级是 year,第二级是 username。我只有一列已经按降序排列。我想显示每个索引级别 0 的前 2 行。

我有什么:

               count
year username
2010 b 677
a 505
c 400
d 300
...
2014 a 100
b 80

我想要的:

               count
year username
2010 b 677
a 505
2011 c 677
d 505
2012 e 677
f 505
2013 g 677
i 505
2014 h 677
j 505

最佳答案

这是一个答案。也许有更好的方法来做到这一点(使用索引?),但我认为它有效。原理看似复杂其实很简单:

  • 索引DataFrame按年份和用户名。
  • DataFrame 分组按索引的第一级(=0)年份
  • 对子 DataFrame 应用两个操作通过groupby获得(每年一个)
    • 按计数升序排列索引 sort_index(by='count') -> 具有更多计数的行将位于 DataFrame 的尾部
    • 只保留最后一个 top行(在本例中为 2),使用负切片符号 ([-top:])。 tail也可以使用方法 ( tail(top) ) 来提高可读性。
  • 删除为年份 droplevel(0) 创建的不必要级别

# Test data    
df = pd.DataFrame({'year': [2010, 2010, 2010, 2011,2011,2011, 2012, 2012, 2013, 2013, 2014, 2014],
'username': ['b','a','a','c','c','d','e','f','g','i','h','j'],
'count': [400, 505, 678, 677, 505, 505, 677, 505, 677, 505, 677, 505]})
df = df.set_index(['year','username'])

top = 2
df = df.groupby(level=0).apply(lambda df: df.sort_index(by='count')[-top:])
df.index = df.index.droplevel(0)
df

count
year username
2010 a 505
a 678
2011 d 505
c 677
2012 f 505
e 677
2013 i 505
g 677
2014 j 505
h 677

关于python - 显示多索引 Pandas 数据框的前 10 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com