如何获得行末字母计数?

时间:2019-02-21 05:21:09

标签: python pandas

我具有以下要在其上应用数据透视表的数据集。

import pandas as pd
import numpy as np
df2 = pd.DataFrame(np.array([
        ['vishal','2018-2-1' ,'a' ],
        ['vishal','2018-2-2' , 'n'],
        ['vishal','2018-2-3' , 'n'],
        ['ankti','2018-2-1' , 'a'],
        ['ankti','2018-2-2' , 'n'],
        ['ankti','2018-2-3' , 'n']]),columns=['name', 'date', 'shift'])

name      date      shift
vishal  2018-2-1     a
vishal  2018-2-2     n
vishal  2018-2-3     n
ankti   2018-2-1     a
ankti   2018-2-2     n
ankti   2018-2-3     n 

我将以下代码应用于上述数据集(以上数据集存储在df2变量中)

table = pd.pivot_table(df2, values='shift', index=['name'], columns=['date'],aggfunc={'shift':np.sum})
print(table)

现在我得到以下结果

输出:

data      2018-2-1    2018-2-2    2018-2-3
name                            
ankti      a             n            n
vishal     a             n            n

现在,我想要包含额外列的额外列,其中包含 n

个计数

最终结果应如下所示 计数列显示每行中存在的n个计数

data      2018-2-1    2018-2-2    2018-2-3  count
name                            
ankti      a             n            n      2
vishal     a             n            n      2 

注意::如果没有标题的计数列也可以。我希望每行末尾都有n个计数。

2 个答案:

答案 0 :(得分:2)

eqsum一起使用:

table = pd.pivot_table(df2, values='shift', index=['name'], 
                       columns=['data'],aggfunc={'shift':np.sum})

table['count'] = table.eq('n').sum(1)

print(table)
date   2018-2-1 2018-2-2 2018-2-3  count
name                                    
ankti         a        n        n      2
vishal        a        n        n      2

答案 1 :(得分:1)

另一种实现方式

df2 = pd.DataFrame(np.array([
    ['vishal', '2018-2-1', 'a'],
    ['vishal', '2018-2-2', 'n'],
    ['vishal', '2018-2-3', 'n'],
    ['ankti', '2018-2-1', 'a'],
    ['ankti', '2018-2-2', 'n'],
    ['ankti', '2018-2-3', 'n']]), columns=['name', 'date', 'shift'])
table = pd.pivot_table(df2, values='shift', index=['name'], columns=['date'], aggfunc={'shift': np.sum})
print(table)
table['count'] = table.apply(lambda x: np.sum(x.values == 'n'), axis=1)

输出:

date   2018-2-1 2018-2-2 2018-2-3  count
name                                    
ankti         a        n        n      2
vishal        a        n        n      2