gpt4 book ai didi

python - 选择具有多年观察的指数

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:35 24 4
gpt4 key购买 nike

我希望只选择具有多年观察结果的行。例如,假设

mlIndx = pd.MultiIndex.from_tuples([('x', 0,),('x',1),('z', 0), ('y', 1),('t', 0),('t', 1)])
df = pd.DataFrame(np.random.randint(0,100,(6,2)), columns = ['a','b'], index=mlIndx)


In [18]: df
Out[18]:
a b
x 0 6 1
1 63 88
z 0 69 54
y 1 27 27
t 0 98 12
1 69 31

我想要的输出是

Out[19]:
a b
x 0 6 1
1 63 88
t 0 98 12
1 69 31

我目前的解决方案是直截了当的,所以可以更轻松地扩展的东西会很棒。您可以假定一个排序索引。

df.reset_index(level=0, inplace=True)
df[df.level_0.duplicated() | df.level_0.duplicated(keep='last')]

Out[30]:
level_0 a b
0 x 6 1
1 x 63 88
0 t 98 12
1 t 69 31

最佳答案

你可以用groupby(在索引的第一级)+ transform来解决这个问题,然后使用 bool 索引过滤掉那些行:

df[df.groupby(level=0).a.transform('size').gt(1)]

a b
x 0 67 83
1 2 34
t 0 18 87
1 63 20

详情
groupby 的输出 -

df.groupby(level=0).a.transform('size')

x 0 2
1 2
z 0 1
y 1 1
t 0 2
1 2
Name: a, dtype: int64

从这里过滤很简单,只需找到大小 > 1 的那些行即可。

关于python - 选择具有多年观察的指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48818691/

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