操作与列熊猫
问题描述:
我有一个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