2017-10-04 33 views
0

pysparkでパーセンテージの頻度を取得しようとしています。pysparkでパーセンテージの頻度を取得する方法

私はここから%の周波数を取得するにはどうすればよい
# Dates in descending order of complaint frequency 
df.createOrReplaceTempView('Comp') 
CompDF = spark.sql("SELECT Company, count(*) as cnt \ 
        FROM Comp \ 
        GROUP BY Company \ 
        ORDER BY cnt DESC") 
CompDF.show() 
+--------------------+----+ 
|    Company| cnt| 
+--------------------+----+ 
|BANK OF AMERICA, ...|1387| 
|  EQUIFAX, INC.|1285| 
|WELLS FARGO & COM...|1119| 
|Experian Informat...|1115| 
|TRANSUNION INTERM...|1001| 
|JPMORGAN CHASE & CO.| 905| 
|  CITIBANK, N.A.| 772| 
|OCWEN LOAN SERVIC...| 481| 

:非常に簡単です

Companies = df['Company'].value_counts(normalize = True) 

は、周波数の取得次のように私はpyhtonでこれをやりましたか?私はあまり運がないものをたくさん試しました。 ご協力いただければ幸いです。

+0

どのようにトータルの使用についてパーセントを計算するために数えます。 – Suresh

+0

あなたが答えを見つけた場合は、親切にそれを受け入れる - ありがとう – desertnaut

答えて

0

スレシュがtotal_countは、データフレームCompaniesの行数であると仮定すると、コメントで暗示するように、あなたはCompDFpercentagesという名前の新しい列を追加するwithColumnを使用することができますが:

total_count = Companies.count() 

df = CompDF.withColumn('percentage', CompDF.cnt/float(total_counts)) 
+0

これは非常にきれいで簡単です。ありがとう! – Murat

+0

@Muratあなたは答えを受け入れることを大変歓迎しています* – desertnaut

0

SQLクエリを変更することで、必要な結果が得られます。

"SELECT Company,cnt/(SELECT SUM(cnt) from (SELECT Company, count(*) as cnt 
    FROM Comp GROUP BY Company ORDER BY cnt DESC) temp_tab) sum_freq from 
    (SELECT Company, count(*) as cnt FROM Comp GROUP BY Company ORDER BY cnt 
    DESC)" 
+0

あなたの応答に感謝! エラーが発生しました:IllegalArgumentException:u'requirement failed:サブクエリsubquery1602が完了していません ' 次のようにデータフレームを取得するためにわずかに変更する必要がありました: CompDF = spark.sql( "SELECT Company、cnt /(SELECT SUM (SELECT Company、count()from cnt \ FROM COMP GROUP BY ORDER BY cnt DESC)temp_tab)からのsum_freq \(SELECT Company、count()としてのcnt FROM Comp GROUP BY Company ORDER BY cnt DESC) ") .collect()C = spark.createDataFrame(CDF)C.show() 'もう一度ありがとう! – Murat

関連する問題