【问题标题】:Pandas multiindex boolean indexingPandas 多索引布尔索引
【发布时间】:2015-10-20 10:30:01
【问题描述】:

因此,给定一个多索引数据框,我想只返回满足多索引中较低索引所有级别条件的行。这是一个小的工作示例:

df = pd.DataFrame({'a': [1, 1, 2, 2], 'b': [1, 2, 3, 4], 'c': [0, 2, 2, 2]})
df = df.set_index(['a', 'b'])

print(df)

出来:

     c
a b   
1 1  0
  2  2
2 3  2
  4  2

现在,我想返回 c > 1 的条目。例如,我想做类似的事情

df[df[c > 1]]

出来:

     c
a b   
1 2  2
2 3  2
  4  2

但我想得到

出来:

     c
a b   
2 3  2
  4  2

对如何以最有效的方式做到这一点有任何想法吗?

【问题讨论】:

  • 你的意思是 c>1 和 a=2?
  • 是的,但我不想指定a == 2。这只是一个玩具示例。
  • 你能澄清你在问什么吗?我不明白你问的不是df[df[c > 1]] 得到的?
  • 我希望a 索引占主导地位,因此,如果唯一值a(在本例中为a==2)下的任何条目具有c 的对应值,则c>1,然后删除与 a 索引的该值关联的所有条目。因此,类似于 `df[df[c > 1 for all a == x] for all x in a] 。

标签: python pandas boolean multi-index booleanquery


【解决方案1】:

我最终使用了groupby

df.groupby(level=0).filter(lambda x: all([c > 1 for v in x['c']]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多