2017-04-02 103 views
4

我有一个数据帧熊猫:在所有列

graph 0  1  2  3  4 
1  blue blue blue blue blue 
2  blue blue blue blue blue 
3  blue red  blue blue red 
4  red  blue red  red  blue 
5  red  red  blue red  red 
6  blue blue blue blue blue 

我需要让每一个串/行的值“蓝色”的计算一定的价值。
所需的输出:

graph result 
1  5 
2  5 
3  3 
4  2 
5  1 
6  5 

我尝试用

(df['0', '1', '2', '3', '4']).applymap(lambda x: str.count(x, 'blue')) 

做,但它返回

KeyError: ('0', '1', '2', '3', '4') 

回答

3
In [35]: df.set_index('graph').eq('blue').sum(1).reset_index(name='result') 
Out[35]: 
    graph result 
0  1  5 
1  2  5 
2  3  3 
3  4  2 
4  5  1 
5  6  5 
1

随着numpy弯曲。如果您可靠地知道列的位置,则可以从头开始重建,即列0

v = df.values 
pd.DataFrame(dict(graph=v[:, 0], result=(df.values[:, 1:] == 'blue').sum(1))) 

    graph result 
0  1  5 
1  2  5 
2  3  3 
3  4  2 
4  5  1 
5  6  5 

幼稚时间测试
enter image description here