看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本需求是对数据的形状进行转换。将以下原数据转换为目标数据格式,区域、性别展开,并集中一列展示数量列。
原数据:
'''
区域ID 性别女 性别男
1 111 111
2 222 222
3 333 333
'''
转化为目标数据:
'''
区域ID 性别 数量
1 女 111
1 男 111
2 女 222
2 男 222
3 女 333
3 男 333
'''
Pandas 的 df.melt() 是 df.pivot() 逆转操作函数,可以将列放在行上,对数据展开,符合需求,操作完再做必要的数据格式处理。
另外一个方法是用 df.stack() 堆叠,把数据的列放到行上,在堆叠前要将不做行列转换的列设置为索引,操作完再做必要的数据格式处理。
方法一,用 pd.melt() 数据融合方法会得到数据结果,再进行相应的格式处理:
(
pd.melt(df, id_vars=['区域ID'], var_name='性别', value_name='数量')
.assign(性别=lambda x: x.性别.str.replace('性别', ''))
.sort_values('区域ID')
)
'''
区域ID 性别 数量
0 1 女 111
3 1 男 111
1 2 女 222
4 2 男 222
2 3 女 333
5 3 男 333
'''
方法二,使用堆叠的办法,再进行相应的其他数据处理:
(
df.set_index('区域ID')
.stack()
.reset_index()
.rename(columns={'level_1':'性别', 0:'人数'})
)
# 结果同方法一
更新时间:2024-08-18 15:29:27 标签:pandas python 融合 堆叠