题题题…
- 问题
【问题一】 什么是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):即按照某些规则筛选出一些组:输入的是每组数据,输出的是满足要求的组的所有数据。
- 练习
【练习一】: 现有一份关于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 颜色最多;最多的颜色不一定是组内平均而言单位重量最贵的
认输了。。。。