如何计算组中在pandas中具有完全字符串匹配的行数?

时间:2015-11-18 17:22:05

标签: python pandas

我有一个数据框,我希望按某些列进行分组,然后计算与其他列有一些精确字符串匹配的行数。假设所有dtypes都是'对象'。

在伪代码中,我正在寻找类似的东西:

df.groupby('A').filter(x['B'] == '0').size()

我想按列'A'进行分组,然后计算与字符串'0'完全匹配的列'B'的行数。

编辑:我发现了一个不太优雅的解决方案:

def counter(group):
    i = 0
    for item in group:
        if item == '0':
            i = i + 1
    return i

df.groupby('A')['B'].agg(counter)

必须有更好的方法。

2 个答案:

答案 0 :(得分:1)

我认为您在问题中提出的解决方案没有太大问题。如果你想把它做成一个衬里,你可以做到以下几点:

data = np.array(list('abcdefabc')).reshape((3, 3))
df = pd.DataFrame(data, columns=list('ABC'))
df

    A   B   C
 0  a   b   c
 1  d   e   f
 2  a   b   c

df.groupby('A').agg(lambda x:list(x).count('c'))


    B   C
A       
a   0   2
d   0   0

这样做的好处是可以为原始数据框中的每一列提供所有值

答案 1 :(得分:0)

尝试创建一个临时列,建议该值是否为零 然后根据此列制作数据透视表

希望这会有所帮助。

让我知道它是否有效。

import pandas as pd

df=pd.DataFrame({'A':['one','one','one','one','one','one','one','two','two','two','two','two','two','two'],'B':[1,2,3,0,2,3,0,2,3,2,0,3,44,55]})

# create a new column if the values is ZERO or not.
df['C'] = df['B'].apply(lambda x: 'EQUALS_ZERO' if x==0 else 'NOT_EQUAL_ZERO')

# make a pivote table
# this will give you value for both =0 and !=0
x= pd.pivot_table(df,index=['A'],values='B',columns='C',aggfunc='count',fill_value=0)
print(x)