我的理解是MultiIndex.dropna()
删除至少一个级别为NaN
的索引条目,没有任何条件.然而,如果之前的groupby
与dropna=False
一起使用,那么就不能再使用MultiIndex.dropna()
了.
- 不同行为的原因是什么?
- 使用
groupby
后如何删除NaN
个条目?
(我知道,如果没有dropna
参数,NaN
个组将被groupby
删除,但我正在寻找一种在早些时候使用该参数的情况下工作的解决方案).
import pandas as pd
import numpy as np
d = {(8.0, 8.0): {'A': -1.10, 'B': -1.0},
(7.0, 8.0): {'A': -0.10, 'B': 0.1},
(5.0, 8.0): {'A': 1.15, 'B': -1.2},
(7.0, 7.0): {'A': 1.10, 'B': 1.6},
(7.0, np.NaN): {'A': 0.70, 'B': -0.7},
(8.0, np.NaN): {'A': -1.00, 'B': 0.9},
(np.NaN, 5.0): {'A': -2.20, 'B': 1.1}}
# This works as expected
index = pd.MultiIndex.from_tuples(d.keys(), names=['L1', 'L2'])
df = pd.DataFrame(d.values(), index=index)
print(df.index.dropna())
# This doesn't work as expected
df = df.groupby(['L1', 'L2'], dropna=False).mean()
print(df.index.dropna())
MultiIndex([(8.0, 8.0),
(7.0, 8.0),
(5.0, 8.0),
(7.0, 7.0)],
names=['L1', 'L2'])
MultiIndex([(5.0, 8.0),
(7.0, 7.0),
(7.0, 8.0),
(7.0, nan),
(8.0, 8.0),
(8.0, nan),
(nan, 5.0)],
names=['L1', 'L2'])