2016-01-12 73 views
0

嗨我试图从整个DataFrame减去DataFramecolumns之一的值。直觉上,这对我来说似乎不是问题,但不知何故我无法弄清楚。从数据框中减去列

下面是代码:

import pandas as pd 

x = pd.DataFrame({ 
    "a": range(1, 10), 
    "b": range(2, 11), 
    "c": range(11, 20) 
}) 

print x - x['b'] 

而我得到的是令人吃惊:

0 1 2 3 4 5 6 7 8 a b c 
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 

代替DataFramecolumns:(A-B),(B-B),(C-B)。

我刚开始玩Python。你能告诉我我错过了什么吗?

谢谢!

+0

你可能想在这里看到我的回答这说明发生了什么:http://stackoverflow.com/questions/29954263/what-这个词广播意味着在熊猫文件/ 29955358#29955358 – EdChum

回答

2

尝试:

x.subtract(x['b'], axis=0) 

    a b c 
0 -1 0 9 
1 -1 0 9 
2 -1 0 9 
3 -1 0 9 
4 -1 0 9 
5 -1 0 9 
6 -1 0 9 
7 -1 0 9 
8 -1 0 9 

docs的详细信息,在axis=0参数,确保了x['B']indexDataFrameindex对齐,而不是columns按默认值。

为了使-运营商的工作,你必须:

(x.T - x['b']).T 
+0

够公平的......谢谢Stefan! –

+0

不客气。 – Stefan

+0

如果您发现答案可以接受,或者您需要任何其他详细信息,请让我知道。 – Stefan