python - 在 Pyspark 和 Pandas 中映射具有实际间隔的字典作为键
问题描述
我很想得到pyspark和pandas的答案。
我的方法:
假设simple_dict = {1:'A',2:'B',3:'C'}
是字典。
在熊猫中:我们可以做到,
df['New_col'] = df['col'].map(simple_dict)
在 pyspark 中:
from itertools import chain
mapping_expr = create_map([lit(x) for x in chain(*simple_dict.items())])
df = df.withColumn('col1_map', mapping_expr[df['col1']])
但是,如果我有一个字典,其中的键为间隔,例如,
import intervals as I
dict_new = {I.closed(0,1):'A',I.openclosed(1,2):'B',I.openclosed(2,3):'C'}
所以,我的 dict_new 是一个以实际间隔为键的字典,它看起来像这样:
print(dict_new)
{[0,1]: 'A', (1,2]: 'B', (2,3]: 'C'}
并且对于任何间隔,
i = I.closed(-1,1),
print(i)
给出 [-1,1] 那么,如果我必须检查一个否。是否在这个区间内我可以输入:0.999 in i,输出:True
但是,如果我在 pandas 和 pyspark 中都有一个包含十进制值的列的数据框,并且我想使用该字典将该列值映射到一个新的类别列中,我该怎么做?
for k in di.keys():
df['new']=df['No'].map(lambda x:di[k] if x in k else None)
df
以上方法无效!
您可以对字典中的键进行不同的构图,但我希望它们是真实的间隔,以便可以对任何真实的 no 进行分类。
这在 SAS 中非常简单:
new_col = format(col,dictionary)
解决方案
推荐阅读
- sms - Gammu:获取 SMS 状态时出错:安全错误。也许没有 PIN 码?
- image - 如何使图像/小部件的某些部分透明,如屏幕截图所示
- react-native - 使用“if”语句在渲染期间跳过反应导航屏幕,但使用嵌套三元组工作
- opengl-es - nv12 到 rgb opengl 渲染问题
- amazon-web-services - 使用 Terraform 的默认 AWS DHCP 出错
- angular - Google Charts (ng2-google-charts) - 自定义工具提示 - HTML 被附加到工具提示而不是替换它
- node.js - TypeScript 和 NextJs 中跨文件的多个单例实例
- r - 将我的空间坐标转换为 R 中的 sf 对象
- laravel - 无法重新启动 mysql.service:从 18.4 升级后,单元 mysql.service 在 Ubuntu 20.04 中被屏蔽
- r - 重组行上的数据以减少 R 中数据帧中的 NA 数量