如何将DataFrame的行更改为pandas中的列?

时间:2017-10-28 06:18:18

标签: python pandas

现在,我有一个数据框>>> 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))

1 个答案:

答案 0 :(得分:1)

使用cumcount + unstack

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