现在,我有一个数据框>>> df = pd.DataFrame({'name':['a','a','b'], 'value1':[100,200,300], 'value2':[1,2,3]})
>>> df
name value1 value2
0 a 100 1
1 a 200 2
2 b 300 3
:
df
现在,我想将 name value1 value2 name value1 value2
a 100 1 a 200 2
b 300 3
更改为以下格式:
df
那么,我如何有效地转换from pyspark.sql.window import *
window = Window.partitionBy("value_class")
tabla = table.withColumn("CumSumTotal", sum(tabla.Total).over(window))
?
答案 0 :(得分:1)
g = df.groupby('name').cumcount().astype(str)
df1 = (df.set_index([df['name'],g])
.unstack()
.sort_index(axis=1, level=1)
.reset_index(drop=True))
对于唯一列名称,请使用join
:
df1.columns = df1.columns.map('_'.join)
print (df1)
name_0 value1_0 value2_0 name_1 value1_1 value2_1
0 a 100.0 1.0 a 200.0 2.0
1 b 300.0 3.0 None NaN NaN
如果想要重复的列名称使用droplevel
:
df1.columns = df1.columns.droplevel(1)
print (df1)
name value1 value2 name value1 value2
0 a 100.0 1.0 a 200.0 2.0
1 b 300.0 3.0 None NaN NaN
编辑:
替代apply
是有问题的,因为所有dtypes
都更改为object
。