首页 > 解决方案 > 通过对连续变量进行分组来替换分类变量的 NaN

问题描述

我在根据“温度”对“天气条件”进行分组时遇到问题,因为它是一个连续变量。int64因此,我需要通过将“温度”转换为然后替换按模式 “”的 NaN 来对它进行分组Weather cond。但它不应将原始“温度”转换为int64.

Df 是:

temperature weather cond
    0   25.6    Cloudy
    1   28.7    Sunny
    2   26.9    NaN
    3   25.9    Cloudy
    4   29.9    Cloudy
    5   28.1    Overcast
    6   34.7    Sunny
    7   29.6    NaN
    8   26.6    NaN
    9   20.5    NaN

解释:

如果我们考虑温度 28.7 和 28.1,这些值应转换为 28(不在原始 df 中),然后用代表这些温度的“天气条件”模式填充 NaN。

注意:即使是近似值(地板/天花板)也可以接受,即将 28.7 视为 29,将 28.1 视为 28。

标签: pythonpandasnancontinuousdtype

解决方案


import io
df = pd.read_csv(io.StringIO("""temperature  weather cond
    0   25.6    Cloudy
    1   28.7    Sunny
    2   26.9    NaN
    3   25.9    Cloudy
    4   29.9    Cloudy
    5   28.1    Overcast
    6   34.7    Sunny
    7   29.6    NaN
    8   26.6    NaN
    9   20.5    NaN"""), sep="\s\s+", engine="python")

pd.merge_asof(df.sort_values("temperature"), 
              df.loc[~df["weather cond"].isna()].sort_values("temperature"), 
              on="temperature", 
              direction="nearest")

温度 天气 cond_x 天气 cond_y
0 20.5 多云的
1 25.6 多云的 多云的
2 25.9 多云的 多云的
3 26.6 多云的
4 26.9 多云的
5 28.1 灰蒙蒙 灰蒙蒙
6 28.7 晴天 晴天
7 29.6 多云的
8 29.9 多云的 多云的
9 34.7 晴天 晴天

推荐阅读