我有一个这样的数据帧:
| col1 | col2 |
--------------
| a | 1 |
| a | 2 |
| b | 3 |
| c | 4 |
| a | 5 |
现在,我需要创建新的列“col3”,并且我必须根据col1值在col3中放入新值。生成的数据框如下所示。
比如,如果col1的值为“a”,那么col3中应该有“apple”。如果col1的值为“b”,那么col3中应该有“banana”。如果col1的值为“c”,那么col3中应该有“custard”。
注:col2为正常列,请不要考虑。
| col1 | col2 | col3 |
------------------------
| a | 1 |apple |
| a | 2 |apple |
| b | 3 |banana |
| c | 4 |custard |
| a | 5 |apple |
我可以得到任何PYSpark UDF或内置函数?
提前感谢!!!
from pyspark.sql import SparkSession
spark=SparkSession.builder.appName("test").getOrCreate()
data=[('a',1),('a',2),('b',3),('c',4),('a',5)]
headers = ("col1", "col2")
df=spark.createDataFrame(data,headers)
df.show(truncate=0)
#defining UDF
keywords = {
'a': 'apple',
'b': 'banana',
'c': 'custard'
}
def words(col1Value):
return keywords.get(col1Value, "Not Found ! ")
from pyspark.sql.functions import udf
from pyspark.sql.types import *
#Converting function to UDF
convertUDF = udf(lambda z: words(z),StringType())
import pyspark.sql.functions as F
finaloutput=df.withColumn("col3", convertUDF(df['col1']))
finaloutput.show(truncate=0)
数据图表记录:
+----+----+
|col1|col2|
+----+----+
|a |1 |
|a |2 |
|b |3 |
|c |4 |
|a |5 |
+----+----+
输出:
+----+----+-------+
|col1|col2|col3 |
+----+----+-------+
|a |1 |apple |
|a |2 |apple |
|b |3 |banana |
|c |4 |custard|
|a |5 |apple |
+----+----+-------+
我通过这个功能得到了答案。这可能对某人有帮助。
我使用过这个函数:
fruits = {
'a': 'apple',
'b': 'banana',
'c': 'custard'
}
def X(col1Value):
return fruits.get(col1Value, "Not Found ! ")
df['col3']= X(col1Value)
修改变量!!!
我有一个Spark DataFrame,我正在尝试基于以前的列创建一个新列,但对我来说,困难的是我已经按行计算了列的值。例如: 列1 |列2 |列3 1 | 2 | 3 4|5|0 3 | 1 | 1 因此,我想要一个新列,每行具有表达式 max(col1, col2, col3)的列名。所以,所需的输出: Col1 |Col2 |Col3 |Col4 1|2|3|'col3' 4|5|0|'co
我将如何从从excel文件创建的Dataframe中提取列与特定值匹配的行? 以下是Dataframe中的几行: 这是我用来读取excel文件的代码,选择我需要的列并适当地重命名它们: 到目前为止,根据诸如这个、这个或这里的答案,我只能返回第一个索引,其中Food=“Total fruit”。当我尝试上述其他方法时,我只得到列名,例如: 我对熊猫不熟悉,看不出哪里出了问题。为什么我可以提取第一行食
我想将我的自定义函数(它使用if-else梯形)应用到数据帧每行中的这六列(,,,,,)。 我已经尝试了不同的方法从其他问题,但似乎仍然不能找到正确的答案,我的问题。关键的一点是,如果这个人被算作西班牙裔,他们就不能算作其他任何东西。即使他们在另一个种族栏中有一个“1”,他们仍然被算作西班牙裔,而不是两个或两个以上的种族。类似地,如果所有ERI列的总和大于1,则被计为两个或两个以上的种族,不能被计
我想写一个函数,迭代通过一个帐户列表,每个帐户都有一个相关联的值,并分配该帐户与名称列表中的一个名称。名称列表将有相关联的值,我希望分配的名称是具有最小值的名称。 我想的是迭代帐户列表,看看名字列表。首先看acc1,将其分配给名字列表的最小值。acc1的名字变成杰西卡,杰西卡的总价值被acc1值增强...杰西卡变成27,然后acc2去杰西卡再次使杰西卡35,acc3然后找到马特谁是现在的最小,并相
问题内容: 我正在尝试转换DataFrame,以便将某些行复制给定的次数。例如: 应该转换为: 这与使用count函数进行聚合相反。有没有一种简单的方法可以在熊猫中实现(不使用for循环或列表推导)? 一种可能是允许函数返回多行(的类似方法)。但是,我认为现在在大熊猫中是不可能的。 问题答案: 您可以使用groupby: 所以你得到 您可以根据需要固定结果的索引