从熊猫数据帧创建滚动率矩阵

时间:2021-01-21 05:37:49

标签: python python-3.x pandas dataframe

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

老化(已作为 DF 导入)

<头>
纽约时间 DPD30 DPD60 DPD90 DPD120 DPD150 损失
一月 1000 500 400 300 200 100 50
二月 1200 400 350 250 150 180 30
三月 900 890 250 200 180 120 100
四月 2100 600 650 190 125 150 80
五月 1800 1200 400 450 125 80 90
六月 1500 900 800 257 325 90 75

流量矩阵

<头>
纽约时间 DPD30 DPD60 DPD90 DPD120 DPD150
二月 40% 70% 63% 50% 90% 30%
三月 74% 63% 57% 72% 80% 56%
四月 67% 73% 76% 63% 83% 67%
五月 57% 67% 69% 66% 64% 60%
六月 50% 67% 64% 72% 72% 94%

你可以从上面的例子中看到,我从老化表中创建了一个流量矩阵。例如,2 月份的 40% 的计算方法是将 DPD30 中的 400 除以 NYD 1 月份的 1000 (400/1000)(即 1000 中的 400 在下个月移入下一个桶)。

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

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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 列,或者在进一步的代码中给出任何错误。

希望能解决问题。