pandas中dataframe与series转换的问题

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,也就不需要转换了,以下链接是具体的使用方式

https://www.cnblogs.com/bahe/p/15194020.html

posted @ 2020-12-16 17:15  拔河先生  阅读(2136)  评论(0编辑  收藏  举报