获取带有值的向量(如果存在),否则从列中获取 0

克里斯_007

我有这样的数据框:

id    feature    value
a       aa        0.5
b       ab        0.1
a       ab        0.2
a       cc        0.3
c       ab        0.9
b       bb         1

我假设特征列中总共有 4 个唯一值,并且所有id可能不对应于所有特征,所以我想要另一个数据帧,其中id将对应于它具有的特征值,否则如果该特征不存在,则为 0。

例如。:

feature_list = ['aa', 'ab', 'cc', 'bb']

id   feature_vector
a    [0.5, 0.2, 0.3, 0]
b    [0, 0.1, 0, 1]
c    [0, 0.9, 0, 0]
ZygD

您可以创建地图并从中提取值。

from pyspark.sql import functions as F
df = spark.createDataFrame(
    [('a', 'aa', 0.5),
     ('b', 'ab', 0.1),
     ('a', 'ab', 0.2),
     ('a', 'cc', 0.3),
     ('c', 'ab', 0.9),
     ('b', 'bb', 1.0)],
    ['id', 'feature', 'value'])

feature_list = ['aa', 'ab', 'cc', 'bb']

df = df.groupBy('id').agg(F.map_from_entries(F.collect_set(F.struct('feature', 'value'))).alias('map'))
df = df.withColumn('arr', F.array([F.lit(x) for x in feature_list]))
df = df.select('id', F.expr("transform(arr, x -> coalesce(map[x], 0)) feature_vector"))

df.show()
# +---+--------------------+
# | id|      feature_vector|
# +---+--------------------+
# |  c|[0.0, 0.9, 0.0, 0.0]|
# |  b|[0.0, 0.1, 0.0, 1.0]|
# |  a|[0.5, 0.2, 0.3, 0.0]|
# +---+--------------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果列值 == "character(0)",则从另一列获取值

如果返回0结果,则从proc中获取Powershell中的列标题

雪花 case 语句 - 如果列中存在值,则返回 1,否则返回 0

如果 Dataframe 的列中存在任何值,请将值更改为 1 否则插入 0

如果列中无结果,则获取0值-MySQL

如何从(值> 0)的向量中获取最小值

如何遍历各列,检查某列中是否存在特定值,对新列进行突变,如果存在则输入1,否则输入0?

如果行不存在则返回0,否则返回列值

如果值存在则进行数组比较,否则将在索引中添加值0

如果“ var date = data [0] [0]”从A列返回值,如何获取C列的值?

如果设置为 0 的列中不存在值

MySQL:where(如果存在其他值则为 0 - 选择值;否则,选择 0)

在DataFrame中,如何获取特定列中带有0的索引列表?

如果没有记录,如何从max函数中获取0

R:获取仅具有值0的列

在df中添加一列,如果某个值是0,则返回1,否则返回该列的原始值

在 R 中 - 如果单元格值与列匹配,则返回值,否则在新数据框中为 0

如果特定日期没有值返回0,如何在mysql中获取最近7天的记录

Laravel获取大小量(如果不存在)0

如果mySQL中选择的值为“ 0”,则从另一列中选择

如果列 E 或 F 为空或带有值 0,则复制列 B

MySQL - 使用一个表中的列(如果存在),否则从另一个表中获取它

如果other中的值不是nan并且> 0,则从other中的值中减去column中的值

mysql如果value =“ 0”,则获取其他值

SQL Server 如何获得一列的总和,条件是如果它小于 0,则从另一列添加,否则添加该列?

如果表中存在数字,则返回1,否则返回0

如何获取数组 0 值

OR-TOOLS-如果某些IntVar的总和大于0,否则如何设置BoolVar的值,否则为0?

如果找不到值,如何在MySQL中获取SUM函数以返回“ 0”?