我正在尝试将三个(但实际上是$ n个)摊销表数据帧合并到一个以月为主轴的表中。
例如360个月的贷款1可以在2019年5月1日开始,360个月的贷款2可以在2019年9月2日开始,而360个月的贷款3可以在2019年1月1日开始。合并数据框时,第一列应该是第一列任何数据框的月份,最后一列应该是上个月的最后一个月。在没有贷款的月份中,我期望空白或NaN值。
合并时,我似乎无法使Months成为Dataframe键。
我有一个功能,可以获取贷款,将摊销表构建为数据框,并将其放入列表中。
def buildLoanTable():
loans = Loan.objects.all()
df=[]
for l in loans:
df.append(amortization_table(float(l.amount),float(l.rate),l.total_term/12, start_date=l.start_date))
for idx,d in enumerate(df):
df[idx] = d.drop(columns=['Period']).T
df = pd.concat(df, axis=1, ignore_index=True, sort=False)
return df
我尝试了以下各种变化:
df = pd.concat(df, axis=1, ignore_index=True, sort=False)
df = pd.concat(df, axis=1, keys=(['Month']), ignore_index=True, sort=False)
[ 0 1 2 ... 358 359 360
Month 2019-05-01 00:00:00 2019-06-01 00:00:00 2019-07-01 00:00:00 ... 2049-03-01 00:00:00 2049-04-01 00:00:00 2049-05-01 00:00:00
Begin Balance 1.6e+06 1.59725e+06 1.5945e+06 ... 13443.6 6731.57 2.74
Payment 6745.66 6745.66 6745.66 ... 6745.66 6745.66 2.75
Interest 4000 3993.14 3986.25 ... 33.61 16.83 0.01
Principal 2745.66 2752.52 2759.41 ... 6712.05 6728.83 2.74
Additional_Payment 0 0 0 ... 0 0 0
End Balance 1.59725e+06 1.5945e+06 1.59174e+06 ... 6731.57 2.74 0
[7 rows x 361 columns], 0 1 2 ... 357 358 359
Month 2019-09-02 00:00:00 2019-10-02 00:00:00 2019-11-02 00:00:00 ... 2049-06-02 00:00:00 2049-07-02 00:00:00 2049-08-02 00:00:00
Begin Balance 686800 685621 684440 ... 8641.45 5767.47 2886.31
Payment 2895.58 2895.58 2895.58 ... 2895.58 2895.58 2893.53
Interest 1717 1714.05 1711.1 ... 21.6 14.42 7.22
Principal 1178.58 1181.53 1184.48 ... 2873.98 2881.16 2886.31
Additional_Payment 0 0 0 ... 0 0 0
End Balance 685621 684440 683255 ... 5767.47 2886.31 0
[7 rows x 360 columns], 0 1 2 ... 358 359 360
Month 2019-01-01 00:00:00 2019-02-01 00:00:00 2019-03-01 00:00:00 ... 2048-11-01 00:00:00 2048-12-01 00:00:00 2049-01-01 00:00:00
Begin Balance 1.3175e+06 1.31524e+06 1.31297e+06 ... 11069.6 5542.62 1.85
Payment 5554.63 5554.63 5554.63 ... 5554.63 5554.63 1.85
Interest 3293.75 3288.1 3282.43 ... 27.67 13.86 0
Principal 2260.88 2266.53 2272.2 ... 5526.96 5540.77 1.85
Additional_Payment 0 0 0 ... 0 0 0
End Balance 1.31524e+06 1.31297e+06 1.3107e+06 ... 5542.62 1.85 0
似乎没有任何效果。我得到如下输出:
0 1 2 ... 1079 1080 1081
Month 2019-05-01 00:00:00 2019-06-01 00:00:00 2019-07-01 00:00:00 ... 2048-11-01 00:00:00 2048-12-01 00:00:00 2049-01-01 00:00:00
Begin Balance 1.6e+06 1.59725e+06 1.5945e+06 ... 11069.6 5542.62 1.85
Payment 6745.66 6745.66 6745.66 ... 5554.63 5554.63 1.85
Interest 4000 3993.14 3986.25 ... 27.67 13.86 0
Principal 2745.66 2752.52 2759.41 ... 5526.96 5540.77 1.85
Additional_Payment 0 0 0 ... 0 0 0
End Balance 1.59725e+06 1.5945e+06 1.59174e+06 ... 5542.62 1.85 0
[7 rows x 1082 columns]
或者我只得到360列,而Months仅基于其中一项贷款。我预计将获得369列(2019年1月至2049年9月)。
我最近来的人正在使用:
df = pd.concat(df, axis=0, ignore_index=False, sort=False)
结果:
0 1 2 ... 358 359 360
Month 2019-05-01 00:00:00 2019-06-01 00:00:00 2019-07-01 00:00:00 ... 2049-03-01 00:00:00 2049-04-01 00:00:00 2049-05-01 00:00:00
Begin Balance 1.6e+06 1.59725e+06 1.5945e+06 ... 13443.6 6731.57 2.74
Payment 6745.66 6745.66 6745.66 ... 6745.66 6745.66 2.75
Interest 4000 3993.14 3986.25 ... 33.61 16.83 0.01
Principal 2745.66 2752.52 2759.41 ... 6712.05 6728.83 2.74
Additional_Payment 0 0 0 ... 0 0 0
End Balance 1.59725e+06 1.5945e+06 1.59174e+06 ... 6731.57 2.74 0
Month 2019-09-02 00:00:00 2019-10-02 00:00:00 2019-11-02 00:00:00 ... 2049-07-02 00:00:00 2049-08-02 00:00:00 NaN
Begin Balance 686800 685621 684440 ... 5767.47 2886.31 NaN
Payment 2895.58 2895.58 2895.58 ... 2895.58 2893.53 NaN
Interest 1717 1714.05 1711.1 ... 14.42 7.22 NaN
Principal 1178.58 1181.53 1184.48 ... 2881.16 2886.31 NaN
Additional_Payment 0 0 0 ... 0 0 NaN
End Balance 685621 684440 683255 ... 2886.31 0 NaN
Month 2019-01-01 00:00:00 2019-02-01 00:00:00 2019-03-01 00:00:00 ... 2048-11-01 00:00:00 2048-12-01 00:00:00 2049-01-01 00:00:00
Begin Balance 1.3175e+06 1.31524e+06 1.31297e+06 ... 11069.6 5542.62 1.85
Payment 5554.63 5554.63 5554.63 ... 5554.63 5554.63 1.85
Interest 3293.75 3288.1 3282.43 ... 27.67 13.86 0
Principal 2260.88 2266.53 2272.2 ... 5526.96 5540.77 1.85
Additional_Payment 0 0 0 ... 0 0 0
End Balance 1.31524e+06 1.31297e+06 1.3107e+06 ... 5542.62 1.85 0
[21 rows x 361 columns]
我的一部分认为我需要遍历所有数据框以查找最早的月份,最后一个月,然后使用pd.date_range创建一个新的数据框以跨越整个距离,然后有人将所有内容合并到该数据框中?那可行吗?似乎需要更多的努力。