1、按某一列分组,按时间顺序排列,然后对另外一列进行滚动求和。

c=a.copy()
c.sort_values(by=["name","date"],ascending=True)  #按时间顺序
c['cnt'] =c['cnt'].fillna(0)
c['cnt']=c['cnt'].replace(['\\N'],[0])  #空值处理,求和要求数值型
c['cnt'] =c['cnt'].astype('float')
c['sum1'] = c.groupby(['name'])['cnt'].cumsum()  #按行累计求和

 另一种方法,使用rolling_sum方法,但是怎么分组和按时间排序还没想好。

 

2、按pn_md5分组,求每个时间点之前的取值个数。

采用分组按时间排序并标上序号的方法

a =  pd.read_csv('/Users/aaaa.csv',sep=',',dtype=str)
b=a.copy()
b.obs_date = pd.to_datetime(b.obs_date)
b.obs_date=pd.to_datetime(b.date,unit='s')
b['date'] = b['date'].apply(lambda x: x.value // 10**10 )  #时间转unix,rank方法只能对数值操作
b['group_sort']=b['date'].groupby(b['pn_md5']).rank(ascending=1,method='dense')

  

3、python读数据量太大,分块读取方法

import os
import pandas as pd
import numpy as np
from sqlalchemy import create_engine
from sqlalchemy.types import NVARCHAR,INT,DECIMAL,FLOAT
import re
path = '/Users/admin/bb.csv'

#5万行一个块,然后分块处理合并,一次处理部分列 reader = pd.read_table(path,sep=',', chunksize=50000,iterator=True,encoding="utf-8") pd_merge = pd.DataFrame() for chunk in reader: #分块循环读取和处理 print(chunk) chunk_tmp1 = chunk.iloc[:,0:30] pd_merge = pd.concat([pd_merge,chunk_tmp1],axis = 0)