Pandas问题三
【问题一】什么是fillna的前向/后向填充,如何实现?【问题二】 下面的代码实现了什么功能?请仿照设计一个它的groupby版本【问题三】 如何计算组内0.25分位数与0.75分位数?要求显示在同一张表上。【问题四】 既然索引已经能够选出某些符合条件的子集,那么filter函数的设计有什么意义?【问题五】 整合、变换、过滤三者在输入输出和功能上有何异同?【问题六】 在带参数的多函数聚合时,有办法能够绕过wrap技巧实现同样功能吗?
【问题一】什么是fillna的前向/后向填充,如何实现?
df.fillna(method=‘ffll’) 前向填充值method = ffill、pad 前向填充(搬运)值method = bfill、backfill 后向填充(搬运)值
【问题二】 下面的代码实现了什么功能?请仿照设计一个它的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)
s
0 1 1 0 1 1 1 0
s1
0 1 2 2 3 4 5 5
mul
0 1 2 0 3 4 5 0
diff NaN
1 1 -2 3 1 1 -5
where NaN NaN NaN
-2 NaN NaN NaN
-5
ffill NaN NaN NaN
-2 -2 -2 -2 -5
fill_value
0 0 0 -2 -2 -2 -2 -5
add
0 1 2 0 1 2 3 0
df
.groupby
('School').apply(lambda x
:x
['Math'].mul
(x
['Math'].cumsum
()).diff
().where
(lambda m
: m
< 0).ffill
().add
(x
['Math'].cumsum
(),fill_value
=0))
【问题三】 如何计算组内0.25分位数与0.75分位数?要求显示在同一张表上。
df
.groupby
('School').apply(lambda x
: pd
.DataFrame
({
'q25': x
.quantile
(0.25),
'q75': x
.quantile
(0.75)
}))
【问题四】 既然索引已经能够选出某些符合条件的子集,那么filter函数的设计有什么意义?
filter函数是用来筛选组的,结果是组的全体
【问题五】 整合、变换、过滤三者在输入输出和功能上有何异同?
整合(Aggregation)分组计算统计量:输入的是每组数据,输出是每组的统计量,在列维度上是标量。变换(Transformation):即分组对每个单元的数据进行操作(如元素标准化):输入的是每组数据,输出是每组数据经过某种规则变换后的数据,不改变数据的维度。过滤(Filtration):即按照某些规则筛选出一些组:输入的是每组数据,输出的是满足要求的组的所有数据。
【问题六】 在带参数的多函数聚合时,有办法能够绕过wrap技巧实现同样功能吗?
def f_test(s
,low
=50,high
=52):
return s
.between
(low
,high
).max()
grouped_single
['Math'].agg
([f_test
,'mean']).head
()
这里需要理解的是,agg除了传入字符形式的np函数外,其他传入对象也应当是一个函数