2016-11-30 82 views
0

我有一个看起来像这样的数据: -熊猫据帧 - 沁列WRT到值的另一列

data = {"doc1" : {'a': 2 , 'b': 1,'c':3}, "doc2" : {'a': 1 , 'b': 1,'c':3}, "doc3" : {'a': 1 , 'b': 1,'c':3}} 

我把它转换成一个数据帧: -

df = pd.DataFrame.from_dict(data,orient='index') 

数据框的样子这一点: -

a c b doc1 2 3 1 doc2 1 3 1 doc3 1 3 1

现在我要总结列BW中的所有值这里列的值是1

所以我想的值将是2

是否有一个简单的方法来做到这一点,而不是通过这两个列迭代? 我查了其他帖子,发现this: -

这使得使用.loc函数。 df.loc[df['a'] == 1, 'b'].sum()

但由于某种原因,我似乎无法使它与我的数据框一起工作。

请让我知道。

感谢。

+2

“但由于某种原因,我似乎无法使其与我的数据框一起工作。”你能详细描述“某些原因”吗?你找到的答案应该有效。 – nanoix9

+0

嘿,我让它与下面的答案一起工作。但是我的代码也在做同样的事情。只有我搞砸了变数。因此,它失败了。万分感谢 !! – skyfail

回答

1

你非常接近。见下文。

>>> df[df['a'] == 1]['b'].sum() 
2 

代替使用.loc的,尽量只滤波数据帧的第一(df[df['a'] == 1]),则选择列'b',然后求和。

编辑:我会留下这里供将来参考,虽然取决于你使用的熊猫版本,你的解决方案应该工作(谢谢,@maxymoo)。我正在运行0.18.1,并且这两种方法都有效。

+1

实际上,这应该等同于OP的代码...虽然也许它只是最新版本的熊猫? – maxymoo

+0

嗯。你是对的。我正在运行“熊猫0.18.1”,他的解决方案仍然有效。 – blacksite

+0

嘿感谢您的快速回复。我试了代码,它工作正常,但我的数据框是相当大的10K列和超过2K行。我需要多次计算总和。当我使用上面的代码时,花了很多时间。任何更快的方式来做到这一点? – skyfail