连接通过以下方式获得的数据帧pd.假人不是吗

2024-10-01 15:42:48 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能适用于github问题,也可能是bug?,但我首先想确定自己没有做错什么。你知道吗

我有一个由y,2个独立变量和一个偏移量组成的数据帧(我在拟合泊松回归)

df_Data_clim_monthly_0

        var1        offset      var2        y        month
1236    141.858643  27.862616   0.149570    0.000000    1
1237    143.881744  25.166234   0.304853    0.000000    2
1238    130.819931  27.862616   0.385182    0.000000    3
1239    121.556984  26.963822   0.790843    0.135135    4
1240    100.683868  27.862616   1.604284    0.243243    5
1241    56.976879   26.963822   1.440580    0.135135    6
1242    41.691605   27.862616   1.474398    0.108108    7
1243    39.375465   27.862616   1.377272    0.243243    8
1244    37.733364   26.963822   2.826061    0.486486    9
1245    62.874672   27.862616   1.225250    0.055556    10
1246    106.758812  26.963822   0.456604    0.054054    11
1247    138.216904  27.862616   0.161243    0.030303    12
1440    75.941811   27.862616   1.041132    0.000000    1
1441    76.770737   25.166234   1.234092    0.058824    2
1442    69.535652   27.862616   1.594425    0.054054    3
1443    51.365620   26.963822   2.005312    0.000000    4
1444    32.005558   27.862616   3.069238    0.054054    5
1445    23.987453   26.963822   6.779000    0.108108    6
1446    15.179461   27.862616   5.729475    0.135135    7
1447    16.316160   27.862616   6.272911    0.081081    8
1448    21.942101   26.963822   5.712628    0.027027    9
1449    37.506062   27.862616   2.465134    0.055556    10
1450    51.930992   26.963822   1.180570    0.027027    11
1451    64.261795   27.862616   0.834773    0.000000    12

索引不是从0开始的,因为它是从较大的数据集裁剪的。你知道吗

我想为这个月引入一个交互式的术语——看看季节性是否对我的拟合有显著影响,我需要一个虚拟变量,它表示从JFM,AMJ,JAS,OND的变化。你知道吗

为了做到这一点(也许不优雅,但很有效):

df_months3 = deepcopy(df_Data_clim_monthly_0.month)
df_months3[(df_months3==2)|(df_months3==3)]=1
df_months3[(df_months3==5)|(df_months3==6)]=4
df_months3[(df_months3==8)|(df_months3==9)]=7
df_months3[(df_months3==11)|(df_months3==12)]=10

然后呢

df_dummies3 = pd.get_dummies(df_months3,prefix='month')

如果我打印df\u dummies3.head(),看起来很棒

      month_1  month_4  month_7  month_10
1236        1        0        0         0
1237        1        0        0         0
1238        1        0        0         0
1239        0        1        0         0
1240        0        1        0         0

然后我用一个序列乘以虚拟变量(我只想在回归中使用交互项)

df_dummies3var1  = df_dummies3.mul(df_Data_clim_monthly_0['var1'], axis=0)
df_dummies3var2  = df_dummies3.mul(df_Data_clim_monthly_0['var2'], axis=0)

重命名索引以避免列具有相同的标签:

df_dummies3var2 = df_dummies3var2.rename(index=str, 
         columns={"month_1": "var2_month1", "month_4": "var2_month4","month_7": "var2_month7", "month_10": "var2_month10"})

df_dummies3var1 = df_dummies3var1.rename(index=str, 
         columns={"month_1": "var1_month1", "month_4": "var1_month4", "month_7": "var1_month7", "month_10": "var1_month10"})

事情看起来不错,如果我打印头()

      var2_month1  var2_month4  var2_month7  var2_month10
1236     0.149570     0.000000          0.0           0.0
1237     0.304853     0.000000          0.0           0.0
1238     0.385182     0.000000          0.0           0.0
1239     0.000000     0.790843          0.0           0.0
1240     0.000000     1.604284          0.0           0.0
      var1_month1  var1_month4  var1_month7  var1_month10
1236   141.858643     0.000000          0.0           0.0
1237   143.881744     0.000000          0.0           0.0
1238   130.819931     0.000000          0.0           0.0
1239     0.000000   121.556984          0.0           0.0
1240     0.000000   100.683868          0.0           0.0

我把这两个连接起来:

df_dummies3tot = pd.concat([df_dummies3var1, df_dummies3var2], axis=1) 

这很管用。我有一个8列的数据帧。(难以复制和粘贴此数据帧的头部)

     var1_month1  var1_month4  var1_month7  var1_month10  var2_month1  \
1236   141.858643     0.000000          0.0           0.0     0.149570   
1237   143.881744     0.000000          0.0           0.0     0.304853   
1238   130.819931     0.000000          0.0           0.0     0.385182   
1239     0.000000   121.556984          0.0           0.0     0.000000   
1240     0.000000   100.683868          0.0           0.0     0.000000   

      var2_month4  var2_month7  var2_month10  
1236     0.000000          0.0           0.0  
1237     0.000000          0.0           0.0  
1238     0.000000          0.0           0.0  
1239     0.790843          0.0           0.0  
1240     1.604284          0.0           0.0  

现在我想连接变量dataframe和这个,我希望它在同一个dataframe中传递给泊松函数. 它们具有相同的索引和相同的行数。 但如果我这么做了

dftot = pd.concat([df_Data_clim_monthly_0[['var1','offset','var2','y']],
        df_dummies3tot],axis=1) 

dftot的列数(12)是正确的,但行数是原来的两倍,而且本质上,连接将两个数据帧放在彼此的顶部,并用nan填充行。你知道吗

print dftot.head()
           var1     offset   var2       y          var1_month1  var1_month4  \
1236  141.858643  27.862616  0.149570   0.000000          NaN          NaN   
1237  143.881744  25.166234  0.304853   0.000000          NaN          NaN   
1238  130.819931  27.862616  0.385182   0.000000          NaN          NaN   
1239  121.556984  26.963822  0.790843   0.135135          NaN          NaN   
1240  100.683868  27.862616  1.604284   0.243243          NaN          NaN   

      var1_month7  var1_month10  var2_month1  var2_month4  var2_month7  \
1236          NaN           NaN          NaN          NaN          NaN   
1237          NaN           NaN          NaN          NaN          NaN   
1238          NaN           NaN          NaN          NaN          NaN   
1239          NaN           NaN          NaN          NaN          NaN   
1240          NaN           NaN          NaN          NaN          NaN   

      var2_month10  
1236           NaN  
1237           NaN  
1238           NaN  
1239           NaN  
1240           NaN  


print dftot.tail()
      var1      offset  var2        y     var1_month1  var1_month4  \
9995    NaN     NaN      NaN        NaN     0.000000     0.000000   
9996    NaN     NaN      NaN        NaN   168.764008     0.000000   
9997    NaN     NaN      NaN        NaN   170.622360     0.000000   
9998    NaN     NaN      NaN        NaN   147.312576     0.000000   
9999    NaN     NaN      NaN        NaN     0.000000   115.417694   

      var1_month7  var1_month10  var2_month1  var2_month4  var2_month7  \
9995          0.0    157.737946     0.000000     0.000000          0.0   
9996          0.0      0.000000     0.287053     0.000000          0.0   
9997          0.0      0.000000     0.357397     0.000000          0.0   
9998          0.0      0.000000     0.753133     0.000000          0.0   
9999          0.0      0.000000     0.000000     1.374954          0.0   

      var2_month10  
9995      0.200327  
9996      0.000000  
9997      0.000000  
9998      0.000000  
9999      0.000000  

很明显我做错了什么,还是这是某种错误?你知道吗


Tags: 数据dfdatananoffsetmonthmonthlyvar1

热门问题