Python Pandas 改变数据结构 Reshaping Data

一、案例数据准备

import pandas as pd
# 这里假设我们有 5 个人,每个人有 2 种属性数据,共 15 个元素
d = {'name' : pd.Series(['a', 'b', 'c', 'd','e'], index=[0,1,2,3,4]),
   'attri_1' : pd.Series([1.1, 2.2, 3.3, 4.4,5.5], index=[0,1,2,3,4]),
     'attri_2' : pd.Series([1, 2, 3, 4, 5], index=[0,1,2,3,4])
     }

df = pd.DataFrame(d)
print(df)

运行结果:

  name  attri_1  attri_2
0    a      1.1        1
1    b      2.2        2
2    c      3.3        3
3    d      4.4        4
4    e      5.5        5

二、将所有数据展开,汇聚到行显示

2.1 全展开

df_2 = df.melt()
# 将 5 行 3 列的数据转化为 每行 1 个数据,即 15 行数据
# 每一行有 index,variable(原列标签),value(原列中的各个值)
# 这里的显示表示,我们想要看到所有的 5 个 人名, 5 个 属性_1 的值, 5个 属性_2 的值
print(df_2)

运行结果:

   variable value
0      name     a
1      name     b
2      name     c
3      name     d
4      name     e
5   attri_1   1.1
6   attri_1   2.2
7   attri_1   3.3
8   attri_1   4.4
9   attri_1   5.5
10  attri_2     1
11  attri_2     2
12  attri_2     3
13  attri_2     4
14  attri_2     5

2.2 展开特定的列

df_3 = df.melt(id_vars=['name'], var_name = 'attri')
# 以第一列为锚定,展开后面 2 列,10 种组合
# 我们想查看 5 个人的 属性_1 分布,和 属性_2 分布
print(df_3)

运行结果:

  name    attri  value
0    a  attri_1    1.1
1    b  attri_1    2.2
2    c  attri_1    3.3
3    d  attri_1    4.4
4    e  attri_1    5.5
5    a  attri_2    1.0
6    b  attri_2    2.0
7    c  attri_2    3.0
8    d  attri_2    4.0
9    e  attri_2    5.0

三、将汇聚的数据分散到列显示(类似数据透视表)

df_4 = df_3.pivot(index='name',columns='attri',values='value')
# 这种功能类似于 数据透视表,这里的 'name' 这列已经不再是一列,而是 index
print(df_4)

运行结果:

attri  attri_1  attri_2
name                   
a          1.1      1.0
b          2.2      2.0
c          3.3      3.0
d          4.4      4.0
e          5.5      5.0

3.1 显示其中一列

print(df_4['attri_1']) # 显示 attri_1 这一列的元素

运行结果:

name
a    1.1
b    2.2
c    3.3
d    4.4
e    5.5
Name: attri_1, dtype: float64

3.2 显示其中一行

print(df_4.loc['b']) # 显示 'b' 这一行的元素

运行结果:

attri
attri_1    2.2
attri_2    2.0
Name: b, dtype: float64
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值