这可能适合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
我做错了是否明显,或者这是某种错误?