iview table增加一行减少一行_Pandas crosstab()与pivot_table()和groupby()的比较

3b85d829dc33a0b58a878a5a042295a6.png
yeayee:Pandas Dataframe操作concat、join、merge​zhuanlan.zhihu.com
83a8dce6ee89e9cc05031b38fc052158.png
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 设置字体为黑体,解决Matplotlib中文乱码问题
plt.rcParams['axes.unicode_minus']=False # 解决Matplotlib坐标轴负号'-'显示为方块的问题
%matplotlib inline
# 忽略警告
import warnings
warnings.filterwarnings('ignore')

crosstab()与pivot_table()和groupby()的比较

#从外部导入数据
diamonds = pd.read_csv('./data/diamonds.csv')
diamonds.head()

5b8172a5a652bdbbd0889545951ebdef.png
diamonds.info()
diamonds.describe()

66f52351fd3eda74ccf66dc3a1e5b52c.png
pd.crosstab(index=diamonds['cut'], columns=diamonds['color'])  # 对color进行聚类count

1d1b277ad6271216cc8e5784f73826e8.png
pd.crosstab(index=diamonds['cut'],
            columns=diamonds['color'],
            values=diamonds['price'],
            aggfunc=np.mean).round(0)  # 对价格进行聚类,并求price均值

d14e6549690f67de4ace61924fd0e44b.png

使用 groupby()

diamonds.groupby(['cut', 'color'])['price'].mean().round(0)
 

44de3310d99636bb8faee1ca1f8cee5f.png

pivot_table()

diamonds.pivot_table(values='price',
                     index='cut',
                     columns='color',
                     aggfunc=np.mean).round(0)

8db4faee86f8982502fc2bdcc7e82032.png

crosstab()

pd.crosstab(index=diamonds['cut'],
            columns=diamonds['color'],
            values=diamonds['price'],
            aggfunc=np.mean).round(0)

8db4faee86f8982502fc2bdcc7e82032.png
# crosstab()的另外两个有用参数是margins和margins_name(两者都存在于pivot_table()中)。设置为True时,边界计算每行和每列的和。
pd.crosstab(index=diamonds['cut'], 
            columns=diamonds['clarity'],  
            margins=True)

b191fb3b5fb60f611b9e0d5922931ecd.png
pd.crosstab(index=diamonds['cut'],
            columns=diamonds['clarity'],
            margins=True,
            normalize=True)  # normalize 标准化

e05651699d82cb609fa21a37dd357900.png
pd.crosstab(index=[diamonds['cut'], diamonds['clarity']],
            columns=diamonds['color'])  # 复合序列

0b8b48dbad269606655810cde8895d7c.png

unstack() 与stack()

df1 = diamonds.groupby(['cut', 'color'])['price'].mean().round(0)
df1

d4134494657eebaf5e2364a1357fdb16.png

set_index和reset_index

df1
cut        color
Fair       D        4291.0
           E        3682.0
           F        3827.0
           G        4239.0
           H        5136.0
           I        4685.0
           J        4976.0
Good       D        3405.0
           E        3424.0
           F        3496.0
           G        4123.0
           H        4276.0
           I        5079.0
           J        4574.0
Ideal      D        2629.0
           E        2598.0
           F        3375.0
           G        3721.0
           H        3889.0
           I        4452.0
           J        4918.0
Premium    D        3631.0
           E        3539.0
           F        4325.0
           G        4501.0
           H        5217.0
           I        5946.0
           J        6295.0
Very Good  D        3470.0
           E        3215.0
           F        3779.0
           G        3873.0
           H        4535.0
           I        5256.0
           J        5104.0
Name: price, dtype: float64
df1.reset_index()
df1.reset_index().set_index('color')

f36dd1030d1c370554c0e317ae071341.png
df1.reset_index().set_index('color').reset_index()

97935e817a154fcad0c0acb2a9b8448f.png

map、apply、applymap

diamonds.head()

709c5e975f56c1690f896a694223715f.png
trans = dict(zip(diamonds['cut'].unique().tolist(),['理想','优质','良好','非常好','一般' ]))
diamonds['cut_trans'] = diamonds['cut'].map(trans)
diamonds.head()

c66523be3be357cfb367ae444fdad9eb.png
def trans2(x):
    return trans[x]
diamonds['cut_trans_apply'] = diamonds['cut'].apply(trans2)  # apply 函数,可以带参数,也可以指定, axis=0
diamonds.head()

b961a53b5f5ad432ca08b02ab2c542a7.png
# applymap的用法比较简单,会对DataFrame中的每个单元格执行指定函数的操作
df2.applymap(lambda x:"%.1f" % x) # 含有字符串会报错,保留1位小数
df2

loc和iloc

df2.loc['Fair']
color
D    4291.0
E    3682.0
F    3827.0
G    4239.0
H    5136.0
I    4685.0
J    4976.0
Name: Fair, dtype: float64
df2.iloc[0]
color
D    4291.0
E    3682.0
F    3827.0
G    4239.0
H    5136.0
I    4685.0
J    4976.0
Name: Fair, dtype: float64
df2.loc[:,['E']]

427e9ae45fb47b1abb1ea9b8f7d6a2e3.png
df2.iloc[:,[1]]

427e9ae45fb47b1abb1ea9b8f7d6a2e3.png
df2.loc[['Fair','Ideal'],['D','E']]

840622e7172851513d97156aef563e90.png
df2.loc[df2['D']==4291] # 取某一行,取多行匹配用到isin函数

3565d379fad312c0ceebcf8fa36a560a.png
收藏的同时,记得给个赞哈~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值