Pandas multi index Dataframe - 选择并删除

时间:2017-11-11 15:23:11

标签: python pandas

我需要一些帮助来清理具有多索引的Dataframe。

它看起来像这样

                   cost
location season 
Thorp park  autumn £12
            srping £13
            summer £22
Sea life centre  summer  £34
                 spring  £43
Alton towers     and so on.............

位置和季节是索引列。我想查看数据并删除任何没有"季节"三季的价值观。那么"海洋生物中心"应该删除。

任何人都可以帮我吗?

另外一个问题是,我的数据框是从groupby命令创建的,并且没有" cost"的列名。柱。这是正常的吗?列中有值,没有标题。

2 个答案:

答案 0 :(得分:3)

选项1
groupby + count。您可以使用结果来索引数据框。

df

     col
a 1    0
  2    1
b 1    3
  2    4
  3    5
c 2    7
  3    8

v = df.groupby(level=0).transform('count').values
df = df[v == 3]

df

     col
b 1    3
  2    4
  3    5

选项2
groupby + filter。这是Paul H's idea,如果他想发布,则会删除。

df.groupby(level=0).filter(lambda g: g.count() == 3)

     col
b 1    3
  2    4
  3    5 

答案 1 :(得分:2)

选项1
在盒子外面思考......

df.drop(df.count(level=0).col[lambda x: x < 3].index)

     col
b 1    3
  2    4
  3    5

同样具有更强的鲁棒性,因为我不依赖于列中的值。

df.drop(df.index.to_series().count(level=0).loc[lambda x: x < 3].index)

     col
b 1    3
  2    4
  3    5

选项2
对于具有未确定季节数的一般情况的鲁棒性 这使用Pandas版本0.21的groupby.pipe方法

df.groupby(level=0).pipe(lambda g: g.filter(lambda d: len(d) == g.size().max()))

     col
b 1    3
  2    4
  3    5