轴/关键问题将三个数据框合并为一个

时间:2019-08-06 14:27:10

标签: python django pandas dataframe

我正在尝试将三个(但实际上是$ 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创建一个新的数据框以跨越整个距离,然后有人将所有内容合并到该数据框中?那可行吗?似乎需要更多的努力。

0 个答案:

没有答案