P3

题题题…

  1. 问题

【问题一】 什么是fillna的前向/后向填充,如何实现?

答:先来看看函数 fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

其中method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None} 就包含了填充方式

  • pad/ffill:用前一个非缺失值去填充该缺失值
  • backfill/bfill:用后一个非缺失值填充该缺失值
import numpy as np
import pandas as pd
from numpy import nan as NaN

df=pd.DataFrame([[1,2,3],[4,NaN,5],[7,8,9]])
print(df)
'''
   0    1  2
0  1  2.0  3
1  4  NaN  5
2  7  8.0  9
'''

print(df.ffill())  # 前向填充 用上一个2.0填充NaN
'''
   0    1  2
0  1  2.0  3
1  4  2.0  5
2  7  8.0  9
'''

print(df.bfill())  # 前向填充 用下一个8.0填充NaN
'''
   0    1  2
0  1  2.0  3
1  4  8.0  5
2  7  8.0  9
'''

【问题二】 下面的代码实现了什么功能?请仿照设计一个它的groupby版本。

s = pd.Series ([0, 1, 1, 0, 1, 1, 1, 0])
s1 = s.cumsum()
result = s.mul(s1).diff().where(lambda x: x < 0).ffill().add(s1,fill_value =0)

答:不知所以然

【问题三】 如何计算组内0.25分位数与0.75分位数?要求显示在同一张表上。

答:可以使用apply函数的数据框返回值

gp.apply(lambda x:pd.DataFrame({
								'q25':x.quantile(0.25),
                                'q75':x.quantile(0.75)
                             }))

【问题四】 既然索引已经能够选出某些符合条件的子集,那么filter函数的设计有什么意义?

答:filter函数可用来筛选组,即按照某些规则筛选出一些组:输入的是各组,检查的是各组数据 输出的是满足要求的组 (它的所有数据)。它跟索引的区别在于,它能以组为单位进行输出,只要组内有一个数据不符合要求,那么该组就直接被放弃了呀

【问题五】 整合、变换、过滤三者在输入输出和功能上有何异同?

答:(度娘)

  • 整合(Aggregation)分组计算统计量:输入的是每组数据,输出是每组的统计量,在列维度上是标量。

  • 变换(Transformation):即分组对每个单元的数据进行操作(如元素标准化):输入的是每组数据,输出是每组数据经过某种规则变换后的数据,不改变数据的维度。

  • 过滤(Filtration):即按照某些规则筛选出一些组:输入的是每组数据,输出的是满足要求的组的所有数据。

  1. 练习

【练习一】: 现有一份关于diamonds的数据集,列分别记录了克拉数、颜色、开采深度、价格,请解决下列问题:

import pandas as pd

df = pd.read_csv(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\Diamonds.csv')
print(df.head())
'''
   carat color  depth  price
0   0.23     E   61.5    326
1   0.21     E   59.8    326
2   0.23     E   56.9    327
3   0.29     I   62.4    334
4   0.31     J   63.3    335
'''

(a) 在所有重量超过1克拉的钻石中,价格的极差是多少?

max_price = df.loc[df['carat'] >= 1]['price'].max()
min_price = df.loc[df['carat'] >= 1]['price'].min()
print(max_price-min_price)  # 17561

(b) 若以开采深度的0.2\0.4\0.6\0.8分位数为分组依据,每一组中钻石颜色最多的是哪一种?该种颜色是组内平均而言单位重量最贵的吗?

bins = [df['depth'].quantile(i) for i in [0.0, 0.2, 0.4, 0.6, 0.8, 1]]
df['depth_p'] = pd.cut(df['depth'], bins=bins)
print(df.groupby('depth_p')['color'].value_counts())
'''
depth_p       color
(43.0, 60.8]  E        2259
              G        2258
              F        2060
              H        1597
              D        1519
              I        1063
              J         538
(60.8, 61.6]  G        2593
              F        2184
              E        2175
              H        1783
              D        1526
              I        1052
              J         518
(61.6, 62.1]  G        2247
              E        1895
              F        1876
              H        1559
              D        1233
              I        1068
              J         525
(62.1, 62.7]  G        2193
              F        1763
              H        1652
              E        1641
              D        1202
              I        1095
              J         591
(62.7, 79.0]  G        2000
              E        1827
              H        1713
              F        1659
              D        1295
              I        1144
              J         635
Name: color, dtype: int64
'''

可见在[0, 0.2] 分组中是E 颜色最多,其余的区间是G 颜色最多;最多的颜色不一定是组内平均而言单位重量最贵的

认输了。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值