带条件计算的汇总数据框。熊猫

时间:2021-03-30 09:00:49

标签: python pandas

如何使用条件计算汇总数据框。

根据 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

3 个答案:

答案 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