我有一个数据框,我希望按某些列进行分组,然后计算与其他列有一些精确字符串匹配的行数。假设所有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)
必须有更好的方法。
答案 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)