我有Dataframe,名称'tbl'为,
summary col1 col2 col3 col200
count 20000 20000 20000 20000
mean 3.02 789.83 8379.02 20.03
std dev 1.02 2.03 0.8 0.56
我使用下面的代码进行了转置,
header = [i[0] for i in tbl.select("summary").rdd.map(tuple).collect()]
tt = tbl.select([c for c in tbl.columns if c not in ["summary"]])
rtt = tt.rdd.map(tuple)
rtt1 = rtt.zipWithIndex().flatMap(lambda (x,i): [(i,j,e) for (j,e) in enumerate(x)])
rtt2 = rtt1.map(lambda(i,j,e):(j,(i,e))).groupByKey().sortByKey()
rtt3 = rtt2.map(lambda (i,x):sorted(list(x), cmp=lambda(i1,e1),(i2,e2) : cmp(i1,i2)))
rtt4 = rtt3.map(lambda x: map(lambda (i,y):y, x))
问题:
在转置时,我可以生成诸如
之类的列count Mean Std dev
20000 3.02 1.02
20000 789.83 2.03
但是这个转换缺少列标题名称来标识转置是针对哪个变量。我有'3 X 42000'维度的数据帧,所有列都是唯一的,看看如何识别如何在转置上添加列标题作为行标题。
答案 0 :(得分:1)
如何使用熊猫:
df = sc.parallelize([(-1.0, 2.0, -3.0), (4.4, 5.1, -6.4)]).toDF()
pdf = df.describe().toPandas()
pdf.T[1:].rename(columns=pdf.T.iloc[0])
count mean stddev min max
_1 2 1.7000000000000002 3.818376618407357 -1.0 4.4
_2 2 3.55 2.192031021678297 2.0 5.1
_3 2 -4.7 2.4041630560342617 -6.4 -3.0
你不需要Spark来处理120,000个值......