使用 GroupBy 应用时保留 NaN 组
Keep NaN groups when using GroupBy apply
在某些组为 NaN 的 GroupBy 对象上使用 apply 时,我希望保留结构。使用 dropna=False 似乎没有帮助,应用时 NaN 组仍然丢失。
mux = pd.MultiIndex.from_arrays([['a', 'a', np.nan, 'b', 'b'], ['t', 'u', np.nan, 'w', 'y']],
names=['level1', 'level2'])
df = pd.DataFrame({'col': [0, np.nan, np.nan, 3, 4]}, mux)
df
col
level1 level2
a t 0.0
u NaN
NaN NaN NaN
b w 3.0
y 4.0
df = df.groupby(['level2'], dropna=False).apply(lambda x: x)
df
col
level1 level2
a t 0.0
u NaN
b w 3.0
y 4.0
我认为您必须将 np.NaN 替换为字符串“NaN”,然后应用 groupby。
似乎这更像是一个在没有 level
的情况下调用索引的错误
out = df.groupby(level='level2', dropna=False).apply(lambda x: x)
Out[706]:
col
level1 level2
a t 0.0
u NaN
b w 3.0
y 4.0
NaN NaN NaN
在某些组为 NaN 的 GroupBy 对象上使用 apply 时,我希望保留结构。使用 dropna=False 似乎没有帮助,应用时 NaN 组仍然丢失。
mux = pd.MultiIndex.from_arrays([['a', 'a', np.nan, 'b', 'b'], ['t', 'u', np.nan, 'w', 'y']],
names=['level1', 'level2'])
df = pd.DataFrame({'col': [0, np.nan, np.nan, 3, 4]}, mux)
df
col
level1 level2
a t 0.0
u NaN
NaN NaN NaN
b w 3.0
y 4.0
df = df.groupby(['level2'], dropna=False).apply(lambda x: x)
df
col
level1 level2
a t 0.0
u NaN
b w 3.0
y 4.0
我认为您必须将 np.NaN 替换为字符串“NaN”,然后应用 groupby。
似乎这更像是一个在没有 level
out = df.groupby(level='level2', dropna=False).apply(lambda x: x)
Out[706]:
col
level1 level2
a t 0.0
u NaN
b w 3.0
y 4.0
NaN NaN NaN