首页 > 解决方案 > Pandas - 堆叠多列

问题描述

我构建了以下 DataFrame:

  Movies      Cost    Tickets
0   1158  0.000000   2.000000
1   1158  0.000000   0.000000
2   1158  0.000000   0.000000
3   1158  0.000000   3.000000

我使用 stack() 将我的配置更改为:

                                           Event 1  
0              Movies                         1158
1                Cost                     0.000000
2             Tickets                     2.000000
3              Movies                         1158
4                Cost                     0.000000
5             Tickets                     0.000000
6              Movies                         1158
7                Cost                     0.000000
8             Tickets                     0.000000
9              Movies                         1158
10               Cost                     0.000000
11            Tickets                     3.000000

但这是将数据堆叠在一起,我希望创建一个新列,最终目标是:

                            Event 1   Event 2   Event 3   Event 4
0              Movies          1158      1158      1158      1158
1                Cost      0.000000  0.000000  0.000000  0.000000
2             Tickets      2.000000  0.000000  0.000000  3.000000

这是我当前的配置:

df = pd.DataFrame({
     'Tickets': pd.Series(Tickets),
     'Movies': pd.Series(Movies),
     'Cost': pd.Series(costs)})


print(df)

df.columns.name = ''

stackEvent3 = df.stack()
stackEvent3 = df.stack().reset_index(level=0, drop=True).reset_index(name='Event1')

非常感谢任何指导,谢谢!

标签: pythonpandasdataframe

解决方案


DataFrame.transpose与 一起使用DataFrame.add_prefix

new_df = df.T.rename(columns=dict(zip(df.index, df.index+1))).add_prefix('Event ')
         Event 1  Event 2  Event 3  Event 4
Movies    1158.0   1158.0   1158.0   1158.0
Cost         0.0      0.0      0.0      0.0
Tickets      2.0      0.0      0.0      3.0

设置列名称,就像您想要DataFrame.rename构建一个要替换的字典一样:

df.T.rename(columns=dict(zip(df.index, ['brown', 'purple', 'yellow', 'blue'])))

或者

new_df = df.T
new_df.columns = ['brown', 'purple', 'yellow', 'blue']

推荐阅读