首页 > 编程语言 >Python学习笔记:行列转换小例子

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

时间:2022-12-14 00:33:57浏览次数:56  
标签:Name Python random 笔记 行列 np Year df data

一、需求

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

二、实践

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 略

标签:Name,Python,random,笔记,行列,np,Year,df,data
From: https://www.cnblogs.com/hider/p/16981035.html

相关文章