为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Pandas Dataframe 中将行转换为列

如何在 Pandas Dataframe 中将行转换为列

UYOU 2022-06-28 15:14:13
我有一个格式如下的数据框:DF1:原始数据框的形状为 (1200, 9)这是示例数据框    x1      x2      x3     Group    1.0     0.0     0.0     A    0.0     0.0     0.0     A    0.0     3.0     11.0    A    0.0     0.0     0.0     A    0.0     1.0     0.0     A    0.0     0.0     0.0     E    0.0     0.0     0.0     E    0.0     0.0     0.0     E    0.0     0.0     6.0     E    0.0     0.0     0.0     E我想要以下格式的输出:DF_Res:Group    A    E   x1  1.0  0.0   x2  0.0  0.0   x3  0.0  0.0   x1  0.0  0.0   x2  0.0  0.0   x3  0.0  0.0   x1  0.0  0.0   x2  3.0  0.0   x3  11.0  0.0   x1  0.0  0.0   x2  0.0  0.0   x3  0.0  6.0   x1  0.0  0.0   x2  1.0  0.0   x3  0.0  0.0我想转换我的列,使它们成为组,组成为列标题。
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

如果想要聚合值,例如按sum组:


df1 = df.groupby('Group').sum().T.rename_axis(None, axis=1).rename_axis('Group').reset_index()

print (df1)

  Group    A    E

0    x1  0.0  0.0

1    x2  0.0  0.0

2    x3  0.0  0.0

3    x4  0.0  0.0

4    x5  0.0  0.0

5    x6  0.0  0.0

6    x7  0.0  0.0

7    x8  0.0  0.0

编辑:


df2 = df.set_index('Group').T.rename_axis(None, axis=1).rename_axis('Group').reset_index()

print (df2)

  Group    A    A    E    E    A

0    x1  0.0  0.0  0.0  0.0  0.0

1    x2  0.0  0.0  0.0  0.0  0.0

2    x3  0.0  0.0  0.0  0.0  0.0

3    x4  0.0  0.0  0.0  0.0  0.0

4    x5  0.0  0.0  0.0  0.0  0.0

5    x6  0.0  0.0  0.0  0.0  0.0

6    x7  0.0  0.0  0.0  0.0  0.0

7    x8  0.0  0.0  0.0  0.0  0.0

编辑1:


df = (df.set_index('Group')

        .groupby(level=0)

        .apply(lambda x: x.stack().reset_index(level=0, drop=True))

        .rename_axis(None)

        .rename_axis('Group', axis=1)

        .T

        .reset_index())


print (df)

   Group     A    E

0     x1   1.0  0.0

1     x2   0.0  0.0

2     x3   0.0  0.0

3     x1   0.0  0.0

4     x2   0.0  0.0

5     x3   0.0  0.0

6     x1   0.0  0.0

7     x2   3.0  0.0

8     x3  11.0  0.0

9     x1   0.0  0.0

10    x2   0.0  0.0

11    x3   0.0  6.0

12    x1   0.0  0.0

13    x2   1.0  0.0

14    x3   0.0  0.0


查看完整回答
反对 回复 2022-06-28
?
暮色呼如

TA贡献1853条经验 获得超9个赞

这有点“hacky”,但您需要创建一个单独的索引来区分您的值。例如,多个值对应于A和x1。这就是我所说的:


df_new = df.set_index('Group')

df_new = df_new.groupby(df_new.index, as_index=False).apply(lambda x: x.stack().reset_index())

df_new.columns = ['Group', 'x', 'value']

df_new = df_new.droplevel(axis=0, level=0).set_index(['Group', 'x'], append=True).unstack('Group').droplevel(axis=1, level=0)

结果:


Group     A    E

x               

x1      1.0  0.0

x2      0.0  0.0

x3      0.0  0.0

x1      0.0  0.0

x2      0.0  0.0

x3      0.0  0.0

x1      0.0  0.0

x2      3.0  0.0

x3     11.0  0.0

x1      0.0  0.0

x2      0.0  0.0

x3      0.0  6.0

x1      0.0  0.0

x2      1.0  0.0

x3      0.0  0.0


查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信