我需要一些帮助来清理具有多索引的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"的列名。柱。这是正常的吗?列中有值,没有标题。
答案 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