如何使用条件计算汇总数据框。
根据 col1 值找到总计数的负数比率。
示例:
Col1 Col2
--------------
A 0.5
A 0.3
A -0.6
B -0.3
C -0.2
B 0
C -0.1
data = {'Col1':['A','A','A','B','C','B','C'],
'Col2':[0.5,0.3,-0.6,-0.3,-0.2,0,-0.1]}
For A
Total number of negative (Count) / Total count for A
= 1/3 = 0.33
预期结果:
Col1 Col2
--------------
A 0.33
B 0.5
C 1
答案 0 :(得分:2)
您可以测试负值并聚合 mean
,它可以工作,因为 True
的处理方式类似于 1
:
df1 = df['Col2'].lt(0).groupby(df['Col1']).mean().reset_index()
print (df1)
Col1 Col2
0 A 0.333333
1 B 0.500000
2 C 1.000000
列由掩码填充的解决方案:
df1 = df.assign(Col2 = df['Col2'].lt(0)).groupby('Col1', as_index=False)['Col2'].mean()
答案 1 :(得分:2)
使用 np.where 函数的解决方案:
df['Col3']=np.where(df['Col2']<0,1,0)
S=df.groupby('Col1')['Col3'].sum()/df.groupby('Col1')['Col3'].count()
print(S)
Col1
A 0.333333
B 0.500000
C 1.000000
Name: Col3, dtype: float64
答案 2 :(得分:1)
另一个选项是 crosstab,这是一个方便的功能(groupby 更快):
In [568]: pd.crosstab(index=df.Col1,
columns=['Col2'],
values = df.Col2.lt(0),
aggfunc = 'mean')
Out[568]:
col_0 Col2
Col1
A 0.333333
B 0.500000
C 1.000000