首页 > 解决方案 > 按照列存在的顺序将列值转换为行

问题描述

下面是我拥有的示例数据框。我需要根据月份将每一行转换为多行。

   df = pd.DataFrame({'Jan': [100,200,300],
                   'Feb': [400,500,600],
                   'March':[700,800,900],
                   })

期望的输出:

Jan 100 Feb 400 March 700 Jan 200 Feb 500 March 800 Jan 300 Feb 600 March 900

尝试使用 pandas melt 功能,但它所做的是将 Jan 组合在一起,然后是二月和三月。就像一月的 3 行,二月的 3 行和三月的一样。但我想实现上述输出。有人可以帮忙吗?

标签: python-3.xpandas

解决方案


使用withDataFrame.stack进行一些数据清理:Series.reset_indexSeries.rename_axis

df1 = (df.stack()
        .reset_index(level=0, drop=True)
        .rename_axis('months')
        .reset_index(name='val'))

或使用numpy- 展平值并通过以下方式重复列名称numpy.tile

df1 = pd.DataFrame({'months': np.tile(df.columns, len(df)),
                    'val': df.values.reshape(1,-1).ravel()})

print (df1)
  months  val
0    Jan  100
1    Feb  400
2  March  700
3    Jan  200
4    Feb  500
5  March  800
6    Jan  300
7    Feb  600
8  March  900

推荐阅读