我正在尝试基于熊猫中的两组列来计算一组新列。这是我正在使用的示例代码。产生ValueError:列的长度必须与键的长度相同
dates = pd.date_range('1/1/2000', periods=100, freq='M')
dft = pd.DataFrame(np.random.randn(100, 4),index=dates, columns=['var_A1',
'var_A2', 'var_B1', 'var_B2'])
list_A=['var_A1', 'var_A2']
list_B=['var_B1', 'var_B2']
list_C=['var_C1', 'var_C2']
dft[list_C]=dft[list_A]/dft[list_B]
答案 0 :(得分:1)
添加.values
,因为熊猫在进行数据帧划分时会检查索引和列的值,然后使用DataFrame
构造函数重新格式化结果,并返回concat
C=pd.DataFrame(data=dft[list_A].values/dft[list_B].values,columns=list_C,index=dft.index)
pd.concat([dft,C],axis=1)
Out[69]:
var_A1 var_A2 ... var_C1 var_C2
2000-01-31 0.099688 -0.299652 ... -0.680396 -0.184230
2000-02-29 -0.632817 0.448125 ... 7.323079 -0.229743
2000-03-31 -1.109919 0.532045 ... 7.358100 0.471776
2000-04-30 -0.658940 -1.999924 ... 1.116363 6.230502
2000-05-31 -0.483534 -0.530186 ... 0.422526 2.010115
2000-06-30 0.578555 -1.122150 ... 1.755439 -1.709229
2000-07-31 0.749859 0.059442 ... -0.670673 -0.042344
2000-08-31 0.273163 -0.445727 ... -0.230529 -0.635203
2000-09-30 -0.418762 -1.870431 ... -1.072958 -2.763591
2000-10-31 -1.280142 -0.237272 ... -0.820698 1.362289
2000-11-30 0.237335 -0.282515 ... -3.832564 -0.919483