fee*_*hka 1 python dataframe apache-spark apache-spark-sql pyspark
我尝试找到以下解决方案:
DataFrame带有3列的A,B,C。groupBy(A)比运行crosstab(B and C)每每个被装箱组groupBy(A)中PySpark熊猫中的示例(我想在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)
Run Code Online (Sandbox Code Playgroud)
更新:
In [12]: df
Out[12]:
A B C
0 AB 100 5
1 AB 200 5
2 AC 150 4
3 AC 500 5
Run Code Online (Sandbox Code Playgroud)
A B C
AB 100 5
200 5
AC 150 4
500 5
Run Code Online (Sandbox Code Playgroud)
应该是AB和AC的交叉表,例如:
AB
C 5
B
100 1
200 1
Run Code Online (Sandbox Code Playgroud)
AC
C 5 4
B
150 0 1
500 1 0
Run Code Online (Sandbox Code Playgroud)
有什么想法怎么做?我无法从此代码中找到实现“ for”的方法,谢谢!
你可以尝试合并A,并B为人工struct并将其用于crosstab:
from pyspark.sql.functions import col, struct
df.withColumn("AB", struct("A", "B")).crosstab("AB", "C")
Run Code Online (Sandbox Code Playgroud)