【问题标题】:Creating roll rate matrix from pandas dataframe从熊猫数据框创建滚动率矩阵
【发布时间】:2021-04-25 12:52:55
【问题描述】:

抱歉,如果我问的是一个非常基本的问题。我想在 python 中复制一个简单的滚动矩阵,但是我很挣扎,我想知道是否可以得到一些帮助。

老化(已作为 DF 导入)

Month NYD DPD30 DPD60 DPD90 DPD120 DPD150 Loss
Jan 1000 500 400 300 200 100 50
Feb 1200 400 350 250 150 180 30
Mar 900 890 250 200 180 120 100
Apr 2100 600 650 190 125 150 80
May 1800 1200 400 450 125 80 90
June 1500 900 800 257 325 90 75

流量矩阵

Month NYD DPD30 DPD60 DPD90 DPD120 DPD150
Feb 40% 70% 63% 50% 90% 30%
Mar 74% 63% 57% 72% 80% 56%
Apr 67% 73% 76% 63% 83% 67%
May 57% 67% 69% 66% 64% 60%
June 50% 67% 64% 72% 72% 94%

从上面的例子可以看出,我已经从老化表中创建了一个流量矩阵。例如,2 月份的 40% 是通过将 DPD30 中的 400 除以 NYD 1 月份的 1000 (400/1000) 计算得出的(即,1000 人中有 400 人在下个月移入下一个存储桶)。

如果有人能指导我如何在 python 中重新创建它,我将不胜感激。我已经将 CSV 老化文件作为 df 导入,但是我不确定如何操作 df 中的数据来为流速矩阵创建新的 df。

非常感谢您的帮助

【问题讨论】:

  • 1.请努力,不要粘贴图像,而是将数据添加到问题中。 2. 数字与您的描述不符。请确保您按照描述的方式计算示例。
  • 已编辑。我希望现在很清楚
  • 肯定更好。谢谢。计算值的公式会有所帮助,因为我仍然不清楚下一个百分比值是如何计算的。
  • 我们正在计算流入下一个存储桶的未偿金额。例如,我们在 1 月份有 1,000 个未偿还的 NYD(尚未到期),当它在 DPD 30 下流入 2 月时,剩余未偿还为 400,这意味着 1 月份 40% 的未偿付在 2 月仍然未偿还。让我知道是否清楚,否则我将添加单元格引用以重现 exatc excel 公式
  • 您只是重复了问题中的内容。不,这不清楚。

标签: python python-3.x pandas dataframe


【解决方案1】:
import pandas as pd


df=pd.read_excel(r"D:\Stack_overflow/test1.xlsx")


#TAKING OUT ALL THE COLUMNS WITH HAVING INT TYPE
cols=df.select_dtypes(exclude=['object']).columns
cols=cols.to_list()


#CREATING ANOTHER LIST WITH _tmp ADDED TO THE LIST ELEMNETS
cols2=[x + '_tmp' for x in cols]

cols2=cols2+['tmp']

cols=cols+['tmp']
print(cols2)

#ADDING TMP COLUMN TO DF
df['tmp']=0

df['Month']=df['Month'].shift(-1)

#RUNNING OUT THE LOOP FOR EVERY EELEMENT STARTING FROM THE DPD30 (ELEMENT 2nd of cols)
for i in range(len(cols)-1):
    df[cols[i]]=((df[cols[i+1]].shift(-1))/df[cols[i]])*100
    
print(df.head())

  Month        NYD      DPD30      DPD60  ...     DPD120     DPD150  Loss  tmp

    0   Feb  40.000000  70.000000  62.500000  ...  90.000000  30.000000   0.0    0
    1   Mar  74.166667  62.500000  57.142857  ...  80.000000  55.555556   0.0    0
    2   Apr  66.666667  73.033708  76.000000  ...  83.333333  66.666667   0.0    0
    3   May  57.142857  66.666667  69.230769  ...  64.000000  60.000000   0.0    0
    4  June  50.000000  66.666667  64.250000  ...  72.000000  93.750000   0.0    0

稍后,如果不需要,您可以删除 tmp 列,或者在进一步的代码中给出任何错误。

希望能解决问题。

【讨论】:

    猜你喜欢
    • 2018-01-25
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2018-11-09
    • 2016-09-02
    • 2019-09-23
    • 2017-04-11
    相关资源
    最近更新 更多