通过pd.dummies获取的连接Pandas数据帧不起作用

时间:2018-04-06 16:19:23

标签: python pandas dataframe

这可能适合github问题,也许是一个错误?但我首先要确保我没有做错事。

我有一个由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_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  

现在我想连接变量数据帧和这个,我希望它在同一个数据帧中传递给smf.poisson。 它们具有相同的索引和相同的行数。 但是如果我做的话

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  

我做错了是否明显,或者这是某种错误?

0 个答案:

没有答案