示例
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上使用切片
代码
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