Pandas 在获取第一个值时不会降低多索引级别

问题描述 投票:0回答:1

示例

import pandas as pd
import numpy as np
t=pd.DataFrame({'c1': {(1, 1, 1): 1, (1, 2, 9): 2, (2, 1, 3): np.nan, (2, 1, 7): 4, (4, 2, 2): 6}, 'c2': {(1, 1, 1): 3, (1, 2, 9): 3, (2, 1, 3): 3, (2, 1, 7): 1, (4, 2, 2): 2}})
print(t["c1"].groupby(level=[0,1]).first())

输出

1  1    1.0
   2    2.0
2  1    4.0
4  2    6.0
Name: c1, dtype: float64

想要的:

1  1  1    1.0
   2  9    2.0
2  1  7    4.0
4  2  2    6.0
Name: c1, dtype: float64

答案不需要是一个groupby,我觉得必须有一种方法可以在尊重nans的索引的iloc上使用切片

python pandas
1个回答
0
投票

代码

reset_index
&
set_index

n = t.index.nlevels # or set manually n = 3 

out = (t.reset_index(level=2)
        .groupby(level=[0, 1]).first()
        .set_index('level_2', append=True).rename_axis([None] * n)
)

        c1  c2
1 1 1  1.0   3
  2 9  2.0   3
2 1 3  4.0   3
4 2 2  6.0   2
© www.soinside.com 2019 - 2024. All rights reserved.