gpt4 book ai didi

python - Python 中的索引匹配等效项

转载 作者:行者123 更新时间:2023-12-02 19:16:55 24 4
gpt4 key购买 nike

我有一个大型数据集,正在尝试操作以进行进一步分析。下面是数据框的相关部分的样子。

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 年 9 月 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 月观察时都会得到 NaN。 11 月份贷款 1 的期初余额应为 150,000。 10 月期初余额应为 175,000。九月期初余额应该默认为与九月期初余额相同,因为我没有八月期末余额可供引用。

更新

我认为我解决了问题,我将合并代码更改为:

final_df = pd.merge(df, df, how="left", left_on=['Loan','pDate'], right_on=['Loan','Date'])

对于 9 月份的观察结果,这仍然是 NaN,但这很好,因为我可以手动替换这些值。

最佳答案

我建议您再写一列“日期 -(1 个月)”,然后将它们加入到日期字段中以获得期初余额。

df["cmonth"] = df.Date.apply(lambda x: x.year*100+x.month)
df["pDate"] = df.Date.apply(lambda x: (x - pd.DateOffset(months=1)))
df["pmonth"] = df.pDate.apply(lambda x: x.year*100+x.month)
final_df = pd.merge(df, df, how="left", left_on="cmonth", right_on="pmonth")
print(final_df[["close_x", "Date_x", "close_y"]])
#close_y is your opening balance

关于python - Python 中的索引匹配等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45333334/

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