我尝试为以下问题找到解决方案:
- 我有一个
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")
