我有一个很大的数据集,我正试图进行进一步分析。以下是数据框的相关部分的外观。Python中的等效索引匹配
Loan Closing Balance Date
1 175,000 2010-10-31
1 150,000 2010-11-30
1 125,000 2010-12-31
2 275,000 2010-10-31
2 250,000 2010-11-30
2 225,000 2010-12-31
3 375,000 2010-10-31
3 350,000 2010-11-30
3 320,000 2010-12-31
我想创建一个名为期初余额新列这基本上是前一个月的月末的期末余额,所以第二行,期初余额也只是等于175,000,这是闭幕第一排的平衡。
由于数据集在2010-10-31开始,我将无法查找2010-09-30的余额,因此对于日期为2010-10-31的任何行,我想使该观察的期初余额等于期末余额。
这是它应该是什么样子:
Loan Closing Balance Date Opening Balance
1 175,000 2010-10-31 175,000
1 150,000 2010-11-30 175,000
1 125,000 2010-12-31 150,000
2 275,000 2010-10-31 275,000
2 250,000 2010-11-30 275,000
2 225,000 2010-12-31 250,000
3 375,000 2010-10-31 375,000
3 350,000 2010-11-30 375,000
3 320,000 2010-12-31 350,000
在Excel中我通常会做一个复合索引匹配扔在EOMONTH函数来做到这一点,但不是很清楚如何在Python做到这一点(还是很新的它)。
任何帮助表示赞赏。
我试着通过Santhosh建议的方法,我也得到了以下内容:
谢谢我想你的解决方案,并最终得到如下:
Closing Balance_x Date_x Closing Balance_y
0 175000 2010-09-30 150000.0
1 175000 2010-09-30 250000.0
2 175000 2010-09-30 350000.0
3 150000 2010-10-31 125000.0
4 150000 2010-10-31 225000.0
5 150000 2010-10-31 320000.0
6 125000 2010-11-30 NaN
7 275000 2010-09-30 150000.0
8 275000 2010-09-30 250000.0
9 275000 2010-09-30 350000.0
10 250000 2010-10-31 125000.0
11 250000 2010-10-31 225000.0
12 250000 2010-10-31 320000.0
13 225000 2010-11-30 NaN
14 375000 2010-09-30 150000.0
15 375000 2010-09-30 250000.0
16 375000 2010-09-30 350000.0
17 350000 2010-10-31 125000.0
18 350000 2010-10-31 225000.0
19 350000 2010-10-31 320000.0
20 320000 2010-11-30 NaN
我再修改的代码做了基于还清贷款ID和日期/ PDATE的合并:
final_df = pd.merge(df, df, how="left", left_on=['Date'], right_on=['pDate'])
Loan Closing Balance_x Date_x Opening Balance
0 1 175000 2010-09-30 150000.0
1 1 150000 2010-10-31 125000.0
2 1 125000 2010-11-30 NaN
3 2 275000 2010-09-30 250000.0
4 2 250000 2010-10-31 225000.0
5 2 225000 2010-11-30 NaN
6 3 375000 2010-09-30 350000.0
7 3 350000 2010-10-31 320000.0
8 3 320000 2010-11-30 NaN
现在,在这种情况下,我不知道为什么我得到楠每年十一月观察。 11月贷款期初余额应为150,000。 10月期初余额应为17.5万。由于我没有8月期末余额可供参考,因此9月期初余额应该与9月期初余额一样拖欠。
更新
想我解决了这个问题,我改变了合并代码:
final_df = pd.merge(df, df, how="left", left_on=['Loan','pDate'], right_on=['Loan','Date'])
这仍然让我的NaN九月的观察,但是这是没有问题,因为我可以做一个手动更换这些价值。
到目前为止你有什么代码? –