我正在使用pyspark下面是我的数据
col_list | col_1| col_2 |...|col_n
col_1,col2 | x | y |...|n
col_2,col_n| a | b |...|z
col_list | col_1| col_2 |...|col_n | concat_cols
col_1,col2 | x | y |...|n | [col_1:x,col_2:y]
col_2,col_n| a | b |...|z | [col_2:b,col_n:z]
您可以使用一些map方法:
import pyspark.sql.functions as F
df2 = df.withColumn(
'col_map',
F.map_from_arrays(
F.array([F.lit(c) for c in df.columns[1:]]),
F.array(df.columns[1:])
)
).withColumn(
'concat_cols',
F.expr("""
map_from_arrays(
split(col_list, ','),
transform(split(col_list, ','), x -> col_map[x])
)
""")
).drop('col_map')
df2.show(truncate=False)
+-----------+-----+-----+-----+------------------------+
|col_list |col_1|col_2|col_n|concat_cols |
+-----------+-----+-----+-----+------------------------+
|col_1,col_2|x |y |n |[col_1 -> x, col_2 -> y]|
|col_2,col_n|a |b |z |[col_2 -> b, col_n -> z]|
+-----------+-----+-----+-----+------------------------+
如果您更喜欢字符串表示形式而不是映射类型列,则可以执行
import pyspark.sql.functions as F
df2 = df.withColumn(
'col_map',
F.map_from_arrays(
F.array([F.lit(c) for c in df.columns[1:]]),
F.array(df.columns[1:])
)
).withColumn(
'concat_cols',
F.expr("""
concat_ws(',',
transform(split(col_list, ','), x -> concat_ws(':', x, col_map[x]))
)
""")
).drop('col_map')
df2.show(truncate=False)
+-----------+-----+-----+-----+---------------+
|col_list |col_1|col_2|col_n|concat_cols |
+-----------+-----+-----+-----+---------------+
|col_1,col_2|x |y |n |col_1:x,col_2:y|
|col_2,col_n|a |b |z |col_2:b,col_n:z|
+-----------+-----+-----+-----+---------------+
问题内容: 我目前有一张看起来像这样的表: 我需要做的是获得“ 费率”列的信息,但每个名称仅获得一次。例如,我有三行John Doe,每行的比率为8。我需要将这些行的比率设为8,而不是24,因此它为每组名称都对比率进行一次计数。 当然是行不通的,因为我试图对比率列而不是名称求和。我知道在对单个记录进行计数时,我可以使用,这就是我试图从中得到的行为类型。 我怎样才能为每个名字获得一个比率? 提前致谢
问题内容: 我一直在努力设计MySQL查询来解决问题。我试图遍历“销售”列表,在其中尝试按客户ID的累计总支出对列出的客户ID进行排序。 在客户ID相同的情况下,如何在汇总购买价格的表中进行迭代? 预期结果如下: 我要:从Sales中选择Customer ID,总和(PurchasePrice)作为PurchaseTotal,其中CustomerID =(从PurchaseTotal升序中选择与销
我有以下问题: 包含带有字符串 、 或 C 的 。 带有的第二个 。 以及其他三列 、 和 (这些列也命名为 、 和 )。 因此 应获得 现在我想遍历每一行,并根据 中的条目将 中的整数分配给列 A、B 或 C。 如何实现此目的? < code>df.withColumn()我不能使用(或者至少我不知道为什么),对于< code>val df2 = df.map(x = 提前期待您的帮助和感谢!
试图在熊猫中复制一个简单的Excel函数,但没有成功。还没有尝试np.where(),因为我想学习lambda函数,尽可能少依赖导入。 复制的函数: Lambda我测试和工作: 不起作用的熊猫的λ: 错误: 我猜它试图计算整个列,而不是逐行计算,我该如何解决这个问题?
我想在Pandas数据集中创建一个新列,基于另外两个列的值。 现在,应该如下所示: 有什么帮助吗?
我有以下问题,因为我是pyspark的新手。基于来自两列的值的条件,我想填充第三列。条件是: < li >如果分号包含在col2中,请检查col1 < ul > < li >如果col1 == 1,则取分号前的值 < li >如果col1 == 2,则取分号后的值 这就是数据帧的样子。 我创建了下面的udf,它给出了错误“不能将列转换为布尔值:请使用” 我通过谷歌搜索各种功能构建了这个udf,所以