首页 > 解决方案 > pandas 向量化优化-python

问题描述

我有来自数据仓库中表的数据,我必须对所有数据进行应用和迭代,并且每行我必须查看同一个表并基于月份获取相同 ID 的历史数据。一旦我有了历史数据,我想对其进行迭代以提取每次迭代的平均值。

数据和代码示例可以在这里找到:https ://github.com/jordi-crespo/optimise-data-tranformation-in-python/blob/master/stackover/stackoverflow.py

我必须用 Python 来做,我曾想过用 pandas 来做,但做所有事情都需要一些时间:

  1. 我从 json 读取数据,第一个数据帧的输出是这样的:

[![在此处输入图像描述][1]][1]

  1. 我对表进行了迭代,得到了每行的历史数据,然后我做了一些操作:
df = pd.read('df.csv')
df_past = pd.read('df_past_csv')

def getdataframe(df,date,id):
    #transform date into datetime object
    datetime_object = datetime.strptime(date, '%Y-%m-%d')
    #transform string column to datetime column
    df['date']= pd.to_datetime(df['date']) 
    #getting month from 12 previous month
    previous12thmonth = datetime_object - relativedelta(months=+12)
    #filter per an_name
    #filter per siteid
    df = df[df['id']==id]
    #filtering
    filtered_dataframe = df[
    (df['date']>= pd.Timestamp(previous12thmonth)) ]
    return filtered_dataframe

def average12months(df_past):

    for index, past in df_past.iterrows():       

        avergaeCancelRatePreviousMonths = df_past['price'][:index].mean() if index != 0 else 10
        history_considered_months_df.loc[index, 'price'] =  price
        average = df_past['price'].mean()
    return average, df_past

for index, rows in df.iterrows():
    df_past = getdataframe(df_past,rows['date']
                                        ,rows['id']
    average,df_past = average12months(df_past)

我一直在阅读,为了加快操作,我可以在熊猫系列上使用矢量化: https ://engineering.upside.com/a-beginners-guide-to-optimizing-pandas-code-for-speed-c09ef2c6a4d6

我如何更改 interrows 循环以对系列进行矢量化?

标签: pythonpandas

解决方案


推荐阅读