Skip to main content
 首页 » 编程设计

python之有什么方法可以在 Spark Dataframe 的组数据上运行 stat 函数交叉表

2025年05月04日36落叶

我尝试为以下问题找到解决方案:

  • 我有一个 DataFrame有 3 列 A、B、C。
  • 我需要 groupBy(A)而不是运行crosstab(B and C)每个由 groupBy(A) 创建的组在PySpark

Pandas 中的示例(我想在 Spak Data Frame 中创建的示例):

grouped = df.groupby('A') 
for name, group in grouped: 
    df_crossed = pd.crosstab(group['B'],group['C']) 
    df_crossed = (df_crossed>0).astype(int) 
    df_result[name] = df_crossed.mean(axis=1).max(axis=0) 

更新:

In [12]: df 
Out[12]:  
        A      B        C 
0       AB    100       5 
1       AB    200       5 
2       AC    150       4 
3       AC    500       5 
A       B          C                        
AB      100        5      
        200        5 
AC      150        4      
        500        5 

AB 和 AC 应该是交叉表 像这样的东西:

AB 
 
C    5  
B 
100  1 
200  1 
AC 
 
C    5  4 
B 
150  0  1 
500  1  0 

有什么办法吗?我无法从这段代码中找到实现“for”的方法 谢谢!

请您参考如下方法:

您可以尝试将 A 和 B 合并到一个人工的 struct 中,并将其用于 crosstab:

from pyspark.sql.functions import col, struct 
 
df.withColumn("AB", struct("A", "B")).crosstab("AB", "C")