熊猫:在所有列中计算一些值

时间:2017-04-02 18:40:06

标签: python pandas

我有一个数据框

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

我需要得到每个字符串/行的值'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 个答案:

答案 0 :(得分: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 :(得分:1)

弯曲numpy。如果您可靠地知道graph列的位置,即列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

答案 2 :(得分:1)

根据pandas.DataFrame.eq

等于等于数据帧和其他按元素计算(二进制运算符eq)。

比较操作符之间有灵活的包装器(eqneleltgegt)。

等效于==,= !、 <=,<,> =,>,并支持选择轴(行或列)和级别进行比较。

不仅用于数字。

希望此信息对您有帮助