python - 通过对连续变量进行分组来替换分类变量的 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。
解决方案
- 与merge_asof自我合并
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 | 晴天 | 晴天 |
推荐阅读
- sql - 根据其他表中的条件创建标志
- javascript - 通过在线 API React 无限滚动功能
- mysql - 如何在mysql中运行嵌套左连接
- asp.net-core - 删除 Kestrel 绑定警告
- ios - 詹金斯与 Fastlane cocoapods 行动无法检测到 podfile
- laravel - 输入字段上的 Vue JS 简单 v-model 功能在 Laravel 应用程序中不起作用
- java - 开源sip客户端手机相关(Peers opensouce)
- c# - task.ScriptingEngine.SaveProjectToStorage() 返回 false
- c# - ItemsControl 的 ListVIew:从 ItemsControl 中选择一项后获取 ListViewItem 索引
- vba - 运行时错误“13”类型不匹配