gpt4 book ai didi

python - 将幻影行附加到 Python 中现有数据框的优化算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:40:22 26 4
gpt4 key购买 nike

我有一个数据框,我想将幻影行(现有行的副本)附加到数据框。

       id   month  as_of_date1 turn  age 
119 5712 201401 2014-01-01 9 0
120 5712 201402 2014-02-01 9 1
121 5712 201403 2014-03-01 9 2
122 5712 201404 2014-04-01 9 3
123 5712 201405 2014-05-01 9 4
124 5712 201406 2014-06-01 9 5
125 9130 201401 2014-01-01 9 0
126 9130 201402 2014-02-01 9 1
127 9130 201403 2014-03-01 9 2
128 9130 201404 2014-04-01 9 3
129 9130 201405 2014-05-01 9 4

幽灵行是按条件选择的:如果 age 小于 turn 我们需要追加最新的行直到 age== turn ofas_of_date1 == now()

现在我正在使用以下代码,但由于数据量很大,大约有 20 万行,有 100 个字段,所以永远用不完

tdf1=tdf.loc[(tdf['age']<tdf['turn'])]
tdf2=tdf1.drop_duplicates(subset=['id'],keep='last')
leads=tdf2.index.tolist()
for lead in leads:
ttdf=tdf.loc[[lead]]
diff1 = relativedelta.relativedelta(datetime.datetime(2018,6,1),tdf.loc[lead,'as_of_date1']).months
diff2=tdf.loc[lead,'turn']-tdf.loc[lead,'age']
diff=min(diff1,diff2)
for i in range(0,diff):
tdf = tdf.append(ttdf, ignore_index=True)

预期结果:

    id   month  as_of_date1 turn  age 
119 5712 201401 2014-01-01 9 0
120 5712 201402 2014-02-01 9 1
121 5712 201403 2014-03-01 9 2
122 5712 201404 2014-04-01 9 3
123 5712 201405 2014-05-01 9 4
124 5712 201406 2014-06-01 9 5
125 9130 201401 2014-01-01 9 0
126 9130 201402 2014-02-01 9 1
127 9130 201403 2014-03-01 9 2
128 9130 201404 2014-04-01 9 3
129 9130 201405 2014-05-01 9 4
130 5712 201406 2014-06-01 9 5
131 5712 201406 2014-06-01 9 5
132 5712 201406 2014-06-01 9 5
133 5712 201406 2014-06-01 9 5
134 9130 201405 2014-05-01 9 4
135 9130 201405 2014-05-01 9 4
136 9130 201405 2014-05-01 9 4
137 9130 201405 2014-05-01 9 4
138 9130 201405 2014-05-01 9 4

如果有人知道更快的算法,我将不胜感激

最佳答案

正如 @Parfit 在注释中提到的那样,附加到数据框确实会消耗内存,因此根本不建议在循环中执行此操作。所以我使用了以下方法,这极大地提高了速度

a=[]
for lead in leads:
ttdf=tdf.loc[[lead]]
diff1 = relativedelta.relativedelta(datetime.datetime(2018,6,1),tdf.loc[lead,'as_of_date1']).months
diff2=tdf.loc[lead,'turn']-tdf.loc[lead,'age']
diff=min(diff1,diff2)
for i in range(0,diff):
a.append(ttdf)

tdf = tdf.append(a, ignore_index=True)

关于python - 将幻影行附加到 Python 中现有数据框的优化算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51969765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com