有一个数据框
df = pd.DataFrame({
'a':(1,2,3,2.003),
'b':(2,2,6,1.993),
'f':(2.5,2,6,2.0),
'flag':(False,False,False,False),
})
df
a b f flag
0 1.000 2.000 2.5 False
1 2.000 2.000 2.0 False
2 3.000 6.000 6.0 False
3 2.003 1.993 2.0 False
你可以和他一起做。
df[['a','b']]
a b
0 1.000 2.000
1 2.000 2.000
2 3.000 6.000
3 2.003 1.993
所以。
df[['a','b']] - 2
a b
0 -1.000 0.000
1 0.000 0.000
2 1.000 4.000
3 0.003 -0.007
但是列减法却意外的吓人
df[['a','b']] - df.f
Out[31]:
a b 0 1 2 3
0 NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN
我期望有两列,第三列的元素被逐个元素地减去。怎么了?
轴指定
好吧,在你回答之后,我找到了一个更清晰的选择——当然,根据我的口味。但沉默
Pandas
对我来说似乎不合逻辑。需要前后转置:使用 . 给出与您的变体相同的结果
.sub()
。我想知道是什么导致了这种奇怪的愿望,不是按列,而是按行?什么是让我无法理解的常识?毕竟
Pandas
,这一切都是关于列的,不是吗?顺便说一句,直接方法调用的变体
.sub()
有些快,但从根本上说并不快:但是,正如@Guamokolatokint指出的那样,在更高的维度上,双重转置非常耗时。