import pandas as pd import datetime as dt path='D:/jsp/dataframe/tb_store_order.csv' df = pd.read_csv(path,low_memory=False) df = df[['member_id','create_time','coupon_id']] df = df[df.coupon_id==0] df.create_time = pd.to_datetime(df.create_time) df['create_time_date'] = df.create_time.apply(lambda x:x.strftime('%Y-%m-%d')) df_min=df.groupby('member_id').create_time_date.min() sj='2020-10-01' sj_time = dt.datetime.strptime(sj, '%Y-%m-%d') df7= pd.DataFrame({'v1':[],'v2':[]}) while sj_time <= dt.datetime.strptime('2020-10-30', '%Y-%m-%d'): if ( sj_time.weekday() < 5 ): df2 = df[df['create_time_date'] == sj_time.strftime('%Y-%m-%d')] df3 = pd.merge(df2,df_min,on='member_id',how='inner') df3.create_time_date_x = pd.to_datetime(df3.create_time_date_x) df3.create_time_date_y = pd.to_datetime(df3.create_time_date_y) df3['shicha']=(df3.create_time_date_x-df3.create_time_date_y).dt.days df3.drop_duplicates(subset=['member_id'],keep='first',inplace=True) df4=df3.groupby(['shicha']).shicha.count() df5= {'v1':df4.index,'v2':df4.values} df6= pd.DataFrame(df5) df7=df7.append(df6,ignore_index=True) print(df4) print(df5) print(df6) sj_time = sj_time + dt.timedelta(days=1) else: sj_time = sj_time + dt.timedelta(days=1) df7.to_csv('D:/jsp/dataframe/CLV.csv')
其中df4因為使用了group by從dataframe變成了series,因為series沒有append函數,然后用了一個簡單的轉換又轉成了dataframe。另外一段代碼里是不能用merge(),也得轉換。
首先定義dictionary,df5={'name1':df4.index,'name2':df4.values}
然后使用pd.DataFrame()將dictionary轉成dataframe,df6 = pd.Dataframe(df5),再使用append函數。
沒啦,應該還會存在其它很多解決辦法。
更新一下,groupby可以配合agg使用,這樣就不會出現series,也就不需要轉換了,以下鏈接是具體的使用方式