操作与列熊猫

操作与列熊猫

问题描述:

我有一个DF,看起来像这样:操作与列熊猫

I_0 I_1 I_2 10 20 30 SF 
q 
0 2 3 4 5 1 1 0.2 
1 5 4 3 4 7 8 0.3 
2 4 8 7 9 8 7 0.4 

我想使操作就可以了,如:

  • 多组序列10,20和30 SF
  • 从I_0,I_1和I_2中减去这些新列。

例如:

I_0 - (column 10 * SF) 
I_1 - (column 20 * SF) 
I_2 - (column 30 * SF) 

然后重命名计算列于I_0_sub,I_1_sub和I_2_sub。

到目前为止,我已经试过这样:

df = pd.merge(df1, df2, how = "left", left_index = True, right_index = True) 
df["SF"] = df["I_q_2"]/df[10] 
test = df.subtract(df2*SF, axis=0) 
test.drop(labels=["10", "20", "30", "SF"], axis = "columns", inplace = True) 
test = test.add_suffix("_sub") 

获取楠为DF。

任何帮助,将不胜感激。

使用filter的选择列始于I

df1 = df.filter(regex='^I') 
print (df1) 
    I_0 I_1 I_2 
q    
0 2 3 4 
1 5 4 3 
2 4 8 7 

然后通过mul选择的子集,多列:

df2 = df[["10", "20", "30"]].mul(df["SF"], axis=0) 
print (df2) 
    10 20 30 
q    
0 1.0 0.2 0.2 
1 1.2 2.1 2.4 
2 3.6 3.2 2.8 

末。减去由sub - 但列是不同的,所以转换值到numpy array

df = df1.sub(df2.values, 0).add_suffix('_sub') 
print (df) 
    I_0_sub I_1_sub I_2_sub 
q       
0  1.0  2.8  3.8 
1  3.8  1.9  0.6 
2  0.4  4.8  4.2 

如果列名在两个df不一样得到NaN S,因为数据不对齐:

print (df1.sub(df2, axis=0)) 
    10 20 30 I_0 I_1 I_2 
q       
0 NaN NaN NaN NaN NaN NaN 
0 NaN NaN NaN NaN NaN NaN 
2 NaN NaN NaN NaN NaN NaN