python - 在 Python 中将数据框列标题转换为行条目

标签 python pandas dataframe

我有一个像这样的数据框

import pandas as pd

year = [2005, 2006, 2007]
A = [4, 5, 7]
B = [3, 3, 9]
C = [1, 7, 6]
df_old = pd.DataFrame({'year' : year, 'A' : A, 'B' : B, 'C' : C})

Out[25]: 
   A  B  C  year
0  4  3  1  2005
1  5  3  7  2006
2  7  9  6  2007

我想将其转换为一个新的数据帧,其中列标题“A”、“B”和“C”位于行中。我有这个 hack,它可以完成这项工作

df_new = pd.DataFrame({'year' : list(df_old['year']) + list(df_old['year'])\
                       + list(df_old['year']),
                       'col' : ['A']*len(df_old['A']) + ['B']*len(df_old['B'])\
                       + ['C']*len(df_old['C']),
                       'val' : list(df_old['A']) + list(df_old['B'])\
                       + list(df_old['C'])})

Out[27]: 
  col  val  year
0   A    4  2005
1   A    5  2006
2   A    7  2007
3   B    3  2005
4   B    3  2006
5   B    9  2007
6   C    1  2005
7   C    7  2006
8   C    6  2007

有没有更好、更压缩的方法来做到这一点?不用说,当列很多时,这会变得很麻烦。

最佳答案

使用melt :

print (df_old.melt('year', value_name='val', var_name='col'))
   year col  val
0  2005   A    4
1  2006   A    5
2  2007   A    7
3  2005   B    3
4  2006   B    3
5  2007   B    9
6  2005   C    1
7  2006   C    7
8  2007   C    6

以及重新排序列 reindex :

df=df_old.melt('year',value_name='val', var_name='col').reindex(columns=['col','val','year'])
print (df)
  col  val  year
0   A    4  2005
1   A    5  2006
2   A    7  2007
3   B    3  2005
4   B    3  2006
5   B    9  2007
6   C    1  2005
7   C    7  2006
8   C    6  2007

关于python - 在 Python 中将数据框列标题转换为行条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790226/

相关文章:

python - 如何使用while循环从python中搜索txt文件

python - ValueError : view limit minimum -35738. 3640567 小于 1 并且是无效的 Matplotlib 日期值

python Pandas : How to skip columns when reading a file?

python - Pandas DataFrame 根据多个列的值选择行,这些列的名称在列表中指定

python - 加入两个 Pandas 数据框

r - 将 ID 分配给连续的组列 r

python - 为什么 Python 2、3 兼容包被命名为 `six` ?

python - 递归展平对象

python - 图像未在 Gmail 中显示 - 使用 django python-postmark

python - 数据框列上的日期偏移量