如何将Python中的DataFrame df1转换为x为列、y降序为索引的样式?
问题:重塑DataFrame结构,将x转为列、y转为降序索引并填充z值
首先来看你的原始DataFrame生成代码:
import pandas as pd import numpy as np import random np.random.seed(10) df1 = pd.DataFrame({'x':[1,2,3,4,5,1,2,3,4,5], 'y':[10,10,10,10,10,20,20,20,20,20], 'z':np.random.normal(size = 10) })
你的需求是:将x值转换为列,y值转换为降序索引,用z值填充对应位置,目标结构如下:
df2 = pd.DataFrame(np.random.randn(2,5), index = [20,10], columns=[1,2,3,4,5])
解决方案
用pandas的pivot()方法先完成数据重塑,再对索引进行降序排序就能完美实现需求:
# 1. 用pivot重塑数据,将y设为索引、x设为列,z作为填充值 df_pivoted = df1.pivot(index='y', columns='x', values='z') # 2. 对索引进行降序排序,得到目标结构 df2 = df_pivoted.sort_index(ascending=False)
简单说明:
pivot()方法会自动把y列的值作为索引,x列的唯一值作为列名,z列的对应值精准填充到对应单元格中;sort_index(ascending=False)会把默认升序的索引(10,20)改成你需要的降序(20,10),最终结构和你给出的df2完全匹配,只是填充的是原始df1中的真实z值而非随机数~
内容的提问来源于stack exchange,提问作者YQ.Wang
相关产品推荐
相关产品推荐

