2017-10-14 97 views
-1

我正在使用python的大熊猫,有一个数据帧,如熊猫:如何在多列某些列数行条件值

age portembarked fare numparentschildren passengerclass sex 

0  1    1  1     1    1 1 
1  2    2  1     1    2 2 
2  1    1  1     1    1 2 
... 

我有列名的列表,我想调理名为“父母”:“年龄”,“车费”,“性”] ,我希望数据是每个列名为“parent_vals”的值[1,2,2]

哪有我计算数据帧的行数,使每列等于该值?

比如我找熊猫符号,它会做这样的事情,

count = df[df[parents] == parent_vals].count() 

^这是不实际的支持。然后这个例子将返回1 如果我知道什么是我知道我可以做以下父清单:

count = df[df["age"]==1 & df["fare"]==2 & df["sex"]==2].count() 

但在“父母”的具体列将通过较大的,因为我循环改变程序,所以我想引用列表。

回答

0

IIUC,你可以索引列,比较,然后sum增加计数。

df 
    age portembarked fare numparentschildren passengerclass sex 
0 1    1  1     1    1 1 
1 2    2  1     1    2 2 
2 1    1  1     1    1 2 

(df[parents] == [1, 2, 2]).all(1).sum() 
1 

如果收到Invalid broadcasting comparison错误,似乎解决方案是将列表转换为np.array第一,然后做比较。


详细

df[parents] == [1, 2, 2] 
    age fare sex 
0 True True True 
1 True False True 
2 False False True 

(df[parents] == [1, 2, 2]).all(1) 
0  True 
1 False 
2 False 
dtype: bool 
+0

我得到无效广播比较[[1,2,2]]与块值:/ –

+0

@ K.P。更新你的熊猫; 'pip install --upgrade pandas' –

+0

@ K.P。首先尝试使用这些虚拟行。如果它有效,那么问题出在你的数据上,你必须告诉我一个重现你问题的例子,否则我不能帮你。 –