数据挖掘:pandas的应用记录 -- 持续更新

    pandas是数据挖掘常用的工具包,内容全面丰富,使用简单。现将日常使用到的比较高级却容易忘记的功能记录下来。

    本篇持续更新,用到哪些该记录的就会更新记录。话不多说,现在开始。

一、shift / rolling / rank 的使用

        1、shift -- 数据移动

df = pd.DataFrame(np.arange(16).reshape(4,4),
                  columns=['AA','BB','CC','DD'],
                  index =['a','b','c','d'])

df.shift(-1) # 上移
df.shift(1) # 下移
df.shift(-1,axis = 1) # 左移
df.shift(1,axis = 1) # 右移

        分组后组内移动

df = pd.DataFrame({'1': ['A1', 'A2', 'A1', 'A2', 'A2', 'A1', 'A2'],
                   '2': ['B1', 'B1', 'B1', 'B1', 'B1', 'B1', 'B1'],
                   'num': [1,2,1,3,4,2,1],
                   'ds': [pd.to_datetime('20130103'),pd.to_datetime('20130102'),
                          pd.to_datetime('20130101'),pd.to_datetime('20130107'),
                          pd.to_datetime('20130105'),pd.to_datetime('20130106'),
                          pd.to_datetime('20130104')]})

df_01 = df.groupby(['1','2']).apply(lambda x: x.sort_values('ds', ascending=True)).reset_index(drop=True)
df_02 = pd.DataFrame(df_01.groupby(['1','2'])['num'].shift(1))
df_03 = pd.concat([df_01,df_02],axis=1)

df_03

        2、rolling -- 滚动滑窗

df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})

'''
    window:表示时间窗的大小;
    min_periods:最少需要有值的观测点的数量;
    center:是否使用window的中间值作为label
'''
df.rolling(3, min_periods=1).sum()
df.rolling(3, min_periods=2).sum()
df.rolling(3, min_periods=1, center=True).sum()

        分组滑窗统计

df = pd.DataFrame({'1': ['A1', 'A2', 'A1', 'A2', 'A2', 'A1', 'A2'],
                   '2': ['B1', 'B1', 'B1', 'B1', 'B1', 'B1', 'B1'],
                   'num': [1,2,1,3,4,2,1],
                   'ds': [pd.to_datetime('20130103'),pd.to_datetime('20130102'),
                          pd.to_datetime('20130101'),pd.to_datetime('20130107'),
                          pd.to_datetime('20130105'),pd.to_datetime('20130106'),
                          pd.to_datetime('20130104')]})
df_01 = df.groupby(['1','2']).apply(lambda x: x.sort_values('ds', ascending=True)).reset_index(drop=True)
df_02 = pd.DataFrame(df_01.groupby(['1', '2'])['num'].rolling(1).mean()).reset_index(drop=True)
df_03 = pd.concat([df_01,df_02],axis=1)

df_03

        3、rank -- 组内排序

list1 = [1, 3, 1,0,7,4,0]
list2 = [3, 3, 2,0,4,4,5]
list3 = [3, 3, 3,3,4,4,6]
df1 = pd.DataFrame({'col1':list1,'col2':list2,'col3':list3})

df2 = df1.groupby(['col3']).rank(method='min',ascending=False)
df3 = df1.groupby(['col3']).rank(method='max',ascending=False)

df2 
df3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值