根据两组不同的列计算一组新的列

时间:2018-12-11 22:55:54

标签: python pandas

我正在尝试基于熊猫中的两组列来计算一组新列。这是我正在使用的示例代码。产生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]

1 个答案:

答案 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