Pandas 是一个强大的分析结构化数据的工具,它基于 Numpy(提供高性能的矩阵运算三方库),是 Python 数据挖掘和数据分析领域的事实标准三方库。
这里有很全面的Pandas教程:pandas 教程,该教程不需要去先学习 python 和 numpy 库。

pandas如何创建

假设有个表格类数据,每列的列明是columns = ['arm_index','label','true_mean']
然后用append的形式来增添每一行,比如row_list = [],然后每次有一行数据就row_list.append()这一行数据
例子:

        row_list = []
        for _,row in all_df_t.iterrows():
            line_data = []
            line_data.append(row['index']) #bs_index
            line_data.append(row['label']) #label- context
            line_data.append(row[type_index]) #reward in this context
            row_list.append(line_data)
        available_arms_df = pd.DataFrame(row_list, columns = columns)

pandas 如何取值

假设df数据如下:

  • 找出某一列中最大的top个值(如2个值)
    df['true_mean'].nlargest(2)
    结果输出为:
24    1.0
33    1.0
Name: true_mean, dtype: float64
  • 将某一列值转化为List
list_a = []
for a in df['arm_index']:
    list_a.append(a)
print(list_a)
  • 筛选行
data=df.loc[2:5] #这里的[2:5]表示第3行到第5行内容,[]第一个起始是0,表示数据的第一行
data_many=df[(df['列名1']== ‘列值1’)&(df['列名2']==‘列值2’)] #多条件匹配

pandas 时间类型移动窗口

点击查看代码
dft = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
                   index=pd.date_range('20130101 09:00:00',
                                       periods=5,
                                       freq='s')) 
dft

                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:01  1.0
2013-01-01 09:00:02  2.0
2013-01-01 09:00:03  NaN
2013-01-01 09:00:04  4.0


dft.rolling(2).sum()

                       B
2013-01-01 09:00:00  NaN
2013-01-01 09:00:01  1.0
2013-01-01 09:00:02  3.0
2013-01-01 09:00:03  NaN
2013-01-01 09:00:04  NaN


dft.rolling(2, min_periods=1).sum()

                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:01  1.0
2013-01-01 09:00:02  3.0
2013-01-01 09:00:03  2.0
2013-01-01 09:00:04  4.0

也就是说: rall(n)就是把倒数n-1个数 与 当前数,做操作,做的操作可以是sum,mean等。 其中:min_periods是指每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA。值可以是int,默认None。offset情况下,默认为1

通过rolling()函数与聚合函数的拼接,组成新的函数,可以更方便地实现窗口函数的功能;
这种用法,功能强大,代码简单,所有参数的设置基本一致;
列举如下
rolling_count() 计算各个窗口中非NA观测值的数量
rolling_sum() 计算各个移动窗口中的元素之和
rolling_mean() 计算各个移动窗口中元素的均值
rolling_median() 计算各个移动窗口中元素的中位数
rolling_var() 计算各个移动窗口中元素的方差
rolling_std() 计算各个移动窗口中元素的标准差
rolling_min() 计算各个移动窗口中元素的最小值
rolling_max() 计算各个移动窗口中元素的最大值
rolling_corr() 计算各个移动窗口中元素的相关系数
rolling_corr_pairwise() 计算各个移动窗口中配对数据的相关系数
rolling_cov() 计算各个移动窗口中元素的的协方差
rolling_quantile() 计算各个移动窗口中元素的分位数

除了支持聚合函数,通过rolling().apply()方法,还可以在移动窗口上使用自己定义的函数,实现某些特殊功能;唯一需要满足的是,在数组的每一个片段上,函数必须产生单个值;参考https://www.jianshu.com/p/b8c795345e93

pandas Series.expanding用法及代码示例

pandas.DataFrame.expanding函数方法的使用
用法:

Series.expanding(self, min_periods=1, center=False, axis=0)

  • expanding()函数的参数,与rolling()函数的参数用法相同;该窗口可生成该统计的值以及该时间点之前所有可用的数据。
  • rolling()函数,是固定窗口大小,进行滑动计算,expanding()函数只设置最小的观测值数量,不固定窗口大小,实现累计计算,即不断扩展;也就是说当rolling()函数的参数window=len(df)时,实现的效果与expanding()函数是一样的。
  • expanding().sum()函数,类似cumsum()函数的累计求和,其优势在于还可以进行更多的聚类计算;

参考;
Pandas进阶之窗口函数rolling()和expanding()