2017-09-08 6 views
0

私は「アクション」という名前の新しい列を取得したいと思いpysparkのUDFは、

import pandas as pd 

ndf = pd.DataFrame({'a':[False, False,True,True,False], 'b':[False, False,False,False, True]}) 

ndf_s = sqlContext.createDataFrame(ndf) 

としてデータフレームを持っています。これは、ndf ['a']がTrueの場合、2つの値を含むことができます。ndf ['b']がTrueの場合、「action」の値は「I am a」、「action」の値は「I am b」、 。それ以外の場合は値を取得しない。あなたはwhen.otherwiseを使用することができます

ndf_result = sqlContext.createDataFrame(pd.DataFrame({'a':[False, False,True,True,False], 'b':[False, False,False,False, True], 'action':[None, None, 'I am a', 'I am a', 'I am b']})) 
+0

両方の列がTrueのチャンスはありますか? – Psidom

+0

可能、その場合は、 "私はaとb"に "アクション"を送信 –

答えて

3

import pyspark.sql.functions as F 

ndf_s.withColumn("action", F.when(
     ndf_s["a"] & ndf_s["b"], "I am a and b" 
    ).otherwise(
     F.when(
      ndf_s["a"], "I am a" 
     ).otherwise(
      F.when(ndf_s["b"], "I am b") 
     ) 
    ) 
).show() 
+-----+-----+------------+ 
| a| b|  action| 
+-----+-----+------------+ 
| true| true|I am a and b| 
|false|false|  null| 
| true|false|  I am a| 
| true|false|  I am a| 
|false| true|  I am b| 
+-----+-----+------------+ 

両方の列の場合には、他の単語.IN「私はaとbだ」と私のようにデータフレームを取得したいと思い値を返し、その後、真であります

udfで別のオプション:

import pyspark.sql.functions as F 

@F.udf 
def action(col_a, col_b): 
    if col_a and col_b: 
     return "I am a and b" 
    elif col_a: 
     return "I am a" 
    elif col_b: 
     return "I am b" 

ndf_s.withColumn("action", action(ndf_s["a"], ndf_s["b"])).show() 
+-----+-----+------------+ 
| a| b|  action| 
+-----+-----+------------+ 
| true| true|I am a and b| 
|false|false|  null| 
| true|false|  I am a| 
| true|false|  I am a| 
|false| true|  I am b| 
+-----+-----+------------+ 
+0

こんにちは@Psidom、あなたの素晴らしい解決に感謝!この結果を達成するために "udf"を使用する変更はありますか? –

+0

条件が複雑で、オプションを 'udf'で更新した場合は' udf'を使用することができます。 – Psidom

+0

夕食!どうもありがとう ! –

関連する問題