Python学习笔记:行列转换小例子

一、需求

需将“宽数据”转换为“长数据”。

二、实践

1.构建测试集

import pandas as pd
import numpy as np

# 创建测试集
df = pd.DataFrame({
    'Year':[2017, 2018, 2019, 2020, 2021],
    'Name':['张飞', '吕布', '黄盖', '周瑜', '诸葛亮'],
    'a': np.random.randn(5),
    'b': np.random.randn(5),
    'c': np.random.randn(5),
    'd': np.random.randn(5)
    })
    
df
'''
   Year Name         a         b         c         d
0  2017   张飞  0.389854  1.309055 -0.306244  0.317678
1  2018   吕布  0.912390 -0.935596 -0.714069  1.051293
2  2019   黄盖 -1.171179 -0.616752  1.398038 -0.971296
3  2020   周瑜 -0.370362 -1.234490  1.256405 -0.476640
4  2021  诸葛亮  0.347184  1.759783 -1.017365 -0.061222
'''

2.方法一:stack & unstack

# 方法一:stack & unstack
df.set_index(['Year', 'Name'], inplace=True)
result = df.stack().reset_index()
result.rename(columns={'level_2': 'Col', 0: 'Value'}, inplace=True) # 重命名

3.方法二:melt

# 方法二:melt
result = pd.melt(df,
                 id_vars=['Year', 'Name'],
                 value_vars=['a', 'b', 'c', 'd'],
                 var_name='Col',
                 value_name='Value')

4.方法三:先拼接再explode爆炸函数裂开

# 方法三:先拼接再explode爆炸函数裂开
df['data'] = df.iloc[:, 2:6].apply(lambda x: '@'.join(x.astype(str)), axis=1)
df['data'] = df['data'].map(lambda x: x.split('@'))
df = df[['Year', 'Name', 'data']]
result = df.explode('data').reset_index(drop=True)

5.方法四:循环遍历

太 low 略

posted @   Hider1214  阅读(209)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示