如何将pandas DataFrame的列名转换为一个列



例如,我已经跟随pandas DataFrame:

import pandas as pd
df = pd.DataFrame(data=[[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c'])
print(df)
a  b  c
0  1  2  3
1  4  5  6

我想把它转换成以下格式:

field data
0     a    1
1     a    4
2     b    2
3     b    5
4     c    3
5     c    6

将原列名作为新列field值,且数据为列的原数据,如何实现?

您可以stack数据帧,然后执行一些索引删除/重置和列重命名:

df.stack().droplevel(0).reset_index().rename(columns={'index': 'field', 0:'data'})

field  data
0     a     1
1     b     2
2     c     3
3     a     4
4     b     5
5     c     6

或者您可以使用melt方法传递变量和值列名:

>>> df.melt(var_name='field', value_name='data')
field  data
0     a     1
1     a     4
2     b     2
3     b     5
4     c     3
5     c     6

stack和melt的值顺序不同。

最新更新