还在用Excel做数据透视表?试试Python吧

import pandas as pd
import numpy as np

分层索引

data = pd.Series(
    np.random.randn(9),
    index = [['a','a','a','b','b','c','c','d','d'],
            [1,2,3,1,3,1,2,2,3]]
)
data
a  1    0.516036
   2    0.212449
   3   -0.361522
b  1    0.078206
   3   -0.680907
c  1    0.118010
   2   -0.087036
d  2    0.416130
   3    0.101482
dtype: float64
#查看索引
data.index
MultiIndex([('a', 1),
            ('a', 2),
            ('a', 3),
            ('b', 1),
            ('b', 3),
            ('c', 1),
            ('c', 2),
            ('d', 2),
            ('d', 3)],
           )
#查看数据
data['b':'d']
b  1    0.078206
   3   -0.680907
c  1    0.118010
   2   -0.087036
d  2    0.416130
   3    0.101482
dtype: float64
data.loc[['b','d']]
b  1    0.078206
   3   -0.680907
d  2    0.416130
   3    0.101482
dtype: float64
data.loc[:,3]
a   -0.361522
b   -0.680907
d    0.101482
dtype: float64
# 重新排列数据
data.unstack()
123
a0.5160360.212449-0.361522
b0.078206NaN-0.680907
c0.118010-0.087036NaN
dNaN0.4161300.101482
# 组合索引
data.unstack().stack()
a  1    0.516036
   2    0.212449
   3   -0.361522
b  1    0.078206
   3   -0.680907
c  1    0.118010
   2   -0.087036
d  2    0.416130
   3    0.101482
dtype: float64
# 为各层索引命名
frame = pd.DataFrame(np.arange(12).reshape(4,3),
                    index=[['a','a','b','b'],
                         [1,2,1,2]],
                    columns=[['A','A','B'],
                            ['G','R','G']])
frame
AB
GRG
a1012
2345
b1678
291011
frame.index.names = ['key1','key2']
frame
AB
GRG
key1key2
a1012
2345
b1678
291011
frame.columns.names = ['S','C']
frame
SAB
CGRG
key1key2
a1012
2345
b1678
291011
# 更换索引位置
frame.swaplevel('key1','key2')
SAB
CGRG
key2key1
1a012
2a345
1b678
2b91011
# 按照层级索引排序
# 按key2排序
frame.sort_index(level=1)
SAB
CGRG
key1key2
a1012
b1678
a2345
b291011
# 按索引层级进行汇总
frame.sum(level='key2')
SAB
CGRG
key2
16810
2121416
frame.sum(level='C',axis=1)
CGR
key1key2
a121
284
b1147
22010
# 设置列的索引
frame = pd.DataFrame({
    'a':range(7),
    'b':range(7,0,-1),
    'c':['one','one','one','two','two','two','two'],
    'd':[0,1,2,0,1,2,3]
})
frame
abcd
007one0
116one1
225one2
334two0
443two1
552two2
661two3
#drop=False 保留用作索引的列
frame2 = frame.set_index(['c','d'])
frame2
ab
cd
one007
116
225
two034
143
252
361
#恢复索引
frame2.reset_index()
cdab
0one007
1one116
2one225
3two034
4two143
5two252
6two361

联合及合并数据

df1 = pd.DataFrame({
    'key':['b','b','a','c','a','a','b'],
    'data1':range(7)
})
df1
keydata1
0b0
1b1
2a2
3c3
4a4
5a5
6b6
df2 = pd.DataFrame({
    'key':['a','b','d'],
    'data2':range(3)
})
df2
keydata2
0a0
1b1
2d2

inner内连接 为两表交集

outer外链接,为两表并集 笛卡尔积

left左连接,保留左表

right右连接,保留右表

# 联合表 自动将重叠列名作为连接的键,默认是内连接inner 即交集2
pd.merge(df1,df2)
keydata1data2
0b01
1b11
2b61
3a20
4a40
5a50
#显式指定
pd.merge(df1,df2,left_on='key',right_on='key')
keydata1data2
0b01
1b11
2b61
3a20
4a40
5a50
#指定为外连接
pd.merge(df1,df2,how='outer')
keydata1data2
0b0.01.0
1b1.01.0
2b6.01.0
3a2.00.0
4a4.00.0
5a5.00.0
6c3.0NaN
7dNaN2.0
# 使用join连接 按照索引合并
df1.set_index(df1['key'])
df2.set_index(df2['key'])

keydata2
key
aa0
bb1
dd2

沿轴向连接

arr = np.arange(6).reshape(2,3)
arr
array([[0, 1, 2],
       [3, 4, 5]])
np.concatenate([arr,arr],axis=0)
array([[0, 1, 2],
       [3, 4, 5],
       [0, 1, 2],
       [3, 4, 5]])
np.concatenate([arr,arr],axis=1)
array([[0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中可以使用Pandas库进行Excel表格数据透视表的操作。以下是一个简单的示例,演示如何使用Pandas从Excel文件中读取数据并创建一个数据透视表。 首先需要安装Pandas库。可以在终端或命令提示符中使用以下命令安装: ``` pip install pandas ``` 接下来,假设有一个名为"example.xlsx"的Excel文件,其中包含名为"Sheet1"的工作表,其中包含以下数据: | Name | Category | Amount | |------|----------|--------| | Alice | A | 100 | | Bob | B | 200 | | Charlie | A | 150 | | Alice | B | 300 | | Bob | A | 250 | 接下来,我们将使用Pandas读取此数据并创建一个数据透视表: ``` python import pandas as pd # 读取Excel文件 df = pd.read_excel('example.xlsx', sheet_name='Sheet1') # 创建数据透视表 pivot_table = pd.pivot_table(df, values='Amount', index='Name', columns='Category', aggfunc='sum') # 打印数据透视表 print(pivot_table) ``` 运行此代码将生成以下输出: ``` Category A B Name Alice 100 300 Bob 250 200 Charlie 150 NaN ``` 这个数据透视表显示了每个人在每个类别中的总金额。在`pd.pivot_table()`函数中,我们使用`df`作为数据源,`values`参数设置为"Amount",这是要计算的数值列;`index`参数设置为"Name",这是要使用的行;`columns`参数设置为"Category",这是要使用的列;`aggfunc`参数设置为"sum",这是要应用于数值列的聚合函数。 数据透视表索引作为行标签和列标签,并显示计算出的汇总值。在这个例子中,数据透视表显示了每个人在每个类别中的总金额。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值