带NaN的pandas qcut

lsmd5eda  于 2023-05-21  发布在  其他
关注(0)|答案(1)|浏览(137)

我试图将 Dataframe 的行元素分配到四分位数中。然而,行可以仅具有NaN,例如:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [np.nan, 20, 30, 40],
                   'B': [np.nan, np.nan, 31, 41],
                   'C': [np.nan, 22, 32, 42],
                   'D': [np.nan, 23, 33, 43],
                   'E': [np.nan, np.nan, 34, np.nan]
                  }
)

我试图用qcut来存储 Dataframe ,但由于顶行(我认为),我遇到了一个错误。当我跑的时候

df.T.apply(lambda x: x.where(not (x.isna().all()), pd.qcut(x, 4, labels=False)).T)

我就掉下去了

IndexError: index -1 is out of bounds for axis 0 with size 0

理想情况下,我希望将NaNs保留在顶行,并对其余行应用qcut函数

dhxwm5r4

dhxwm5r41#

可能的解决方案:

(df.T.apply(
    lambda x: x.dropna().pipe(pd.qcut, 4, labels=False) 
    if not x.isna().all() else x).T)

输出:

A    B    C    D    E
0  NaN  NaN  NaN  NaN  NaN
1  0.0  NaN  1.0  3.0  NaN
2  0.0  0.0  1.0  2.0  3.0
3  0.0  1.0  2.0  3.0  NaN

相关问题