Python 在for循环中快速设置数据帧值的有效方法?可以矢量化吗?

Python 在for循环中快速设置数据帧值的有效方法?可以矢量化吗?,python,pandas,Python,Pandas,快速概述我的目标: 我试图制作一个包含现金流支付数组的数据框架。行是m个贷款数,列是n个日期数,值是这些日期的相关付款(如果有)。我目前的方法是生成mxn数据帧,然后在每个贷款的每个日期查找每个现金流,并将数据帧的相应部分设置为该值 cashflow_frame = pd.DataFrame(columns = all_dates, index = all_ids) 我目前有一个for循环,它可以实现我想要的功能,但是执行起来太长了。我已经对代码进行了行分析: Timer unit: 1e-0

快速概述我的目标: 我试图制作一个包含现金流支付数组的数据框架。行是m个贷款数,列是n个日期数,值是这些日期的相关付款(如果有)。我目前的方法是生成mxn数据帧,然后在每个贷款的每个日期查找每个现金流,并将数据帧的相应部分设置为该值

cashflow_frame = pd.DataFrame(columns = all_dates, index = all_ids)
我目前有一个for循环,它可以实现我想要的功能,但是执行起来太长了。我已经对代码进行了行分析:

Timer unit: 1e-06 s

Total time: 38.6231 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
 2                                           def frameMaker():
 3      3642      1208212    331.7      3.1      for ids, slices in id_grouped:
 4      3641         3542      1.0      0.0          data_slice = slices
 5      3641        17040      4.7      0.0          original_index = data_slice.index.values
 6      3641       583252    160.2      1.5          funded_amt = -data_slice.ix[original_index[0],'outstanding_princp_beg']
 7      3641      2091958    574.6      5.4          issue_d = data_slice.ix[original_index[0], 'issue_d']
 8      3641       346722     95.2      0.9          pmt_date_ranges = data_slice['date'].values
 9      3641       101051     27.8      0.3          date_ranges = np.append(issue_d, pmt_date_ranges)
10      3641       310452     85.3      0.8          rest_cfs = data_slice['pmt_amt_received'].values
11      3641        50856     14.0      0.1          cfs = np.append(funded_amt, rest_cfs)
12                                           
13      3641       321601     88.3      0.8          if data_slice.ix[original_index[-1], 'charged_off_recovs'] > 0:
14       412         6094     14.8      0.0              cfs[-1] = (data_slice.ix[original_index[-1], 'charged_off_recovs'] - 
15       412        35943     87.2      0.1                         data_slice.ix[original_index[-1], 'charged_off_fees'])
16                                           
17      3641     33546392   9213.5     86.9          cashflow_frame.ix[ids,date_ranges] = cfs
因此,我可以看到在数据帧中设置数组是最慢的。我还注意到,由于我有更多的贷款,贷款速度呈指数级下降/所需时间增加了%。为什么它变得越来越慢?在数据帧中设置值的更快方法是什么?有没有办法将操作矢量化

我正在考虑为每笔贷款生成长度相等的数组,然后从(dict[loan id]=[cashflows])创建cashflow_框架,但如果有办法显著加快速度,我想使用我的原始代码

更多详情: id\u grouped是按“id”分组的顶级数据帧。数据从csv中读取。 我的代码生成较低的数据帧,这正是我想要的,但它需要太长的时间。
第一个数据帧是850万行,大约有640000个贷款ID。

输入和所需输出的示例?一般规则是一次点击即可构建一个数据帧。拥有一个数组的数据帧通常不是一个好主意,最好只是拥有一个多索引。为了提供帮助,一些
id\u分组的示例数据将非常有用。您的输入和所需输出的示例?一般规则是在一次点击中构建一个数据帧。拥有一个数组的数据帧通常不是一个好主意,最好只是拥有一个多索引。为了提供帮助,一些
id\u分组的示例数据将非常有用。