我的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
我想对它进行操作,例如:
例如:
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")
获取NaN in df。
任何帮助都将不胜感激。
答案 0 :(得分:2)
使用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
,因为数据未对齐:
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