看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)有以下一个 DataFrame,需要将「序号」列和其他行(起名为「日期」)的值全部转到前两列上,所有的数值转到最后一列上,起名为「值」。
import pandas as pd
import io
data = '''
序号 2004/01 2004/02 2004/03 2004/04 2004/05 2004/06
A1 1.1 1.2 1.3 1.4 1.5 1.6
A2 0.0 0.0 0.0 0.0 2.1 2.2
A3 0.0 0.0 0.0 0.2 0.3 0.4
A4 0.0 0.0 0.0 0.0 5.0 6.0
A5 -0.1 -0.2 -0.3 -0.4 -0.5 -0.6
'''
df = pd.read_csv(io.StringIO(data), sep=r'\s+')
df
# ...
转换结果为:
'''
序号 日期 值
A1 2004/01 1.1
A1 2004/02 1.2
A1 2004/03 1.3
A1 2004/04 1.4
A1 2004/05 1.5
A1 2004/06 1.6
A2 2004/01 0.0
A2 2004/02 0.0
A2 2004/03 0.0
A2 2004/04 0.0
A2 2004/05 2.1
A2 2004/06 2.2
A3 2004/01 0.0
A3 2004/02 0.0
A3 2004/03 0.0
A3 2004/04 0.2
A3 2004/05 0.3
A3 2004/06 0.4
A4 2004/01 0.0
A4 2004/02 0.0
A4 2004/03 0.0
A4 2004/04 0.0
A4 2004/05 5.0
A4 2004/06 6.0
A5 2004/01 -0.1
A5 2004/02 -0.2
A5 2004/03 -0.3
A5 2004/04 -0.4
A5 2004/05 -0.5
A5 2004/06 -0.6
'''
Python 代码如下:
(
df.set_index('序号')
.rename_axis(columns='日期')
.stack()
.rename('值')
.reset_index()
)
或者直接使用 pd.melt()
函数:
(
pd.melt(df, id_vars=['序号'], var_name='日期', value_name='值')
.sort_values(['序号', '日期'])
)
查看相关链接中的知识。
(完)
更新时间:2024-08-18 19:14:44 标签:pandas python 习题 转换 melt