组分离后计算整个色谱柱的平均值

时间:2018-10-24 18:30:28

标签: python pandas dataframe group-by pandas-groupby

我有DataFrame和列ab,其中b包含对应于{{的值YN 1}}和True

我想按False分组,然后,对于每个组,获得该组中a True的平均值除以该组中的行数)。

到目前为止,我所能得到的是

b's (meaning, the number of

但是我想那不是方向。


数据示例:

data['b'] = data['b'].map({'Y': True, 'N': False})
data.groupby('a', as_index=False)['b'].mean()

输出应该是

a   b
1   Y
1   Y
1   N
2   Y
2   Y
2   N
2   N

4 个答案:

答案 0 :(得分:3)

我会用groupbyvalue_counts(normalize=True)来做到这一点:

df.groupby('a')['b'].value_counts(normalize=True).unstack(1)['Y']

a
1    0.666667
2    0.500000
Name: Y, dtype: float64

无需转换/替换/映射。

答案 1 :(得分:3)

使用crosstab

pd.crosstab(df.a,df.b,normalize='index').Y
Out[336]: 
a
1    0.666667
2    0.500000
Name: Y, dtype: float64

答案 2 :(得分:2)

您也可以通过这种方式做到这一点:

df.assign(avg=df.b=='Y').groupby('a')['avg'].mean()

输出:

a
1    0.666667
2    0.500000
Name: avg, dtype: float64

添加reset_index

   a       avg
0  1  0.666667
1  2  0.500000

答案 3 :(得分:1)

numpy.bincount

i, a = data['a'].factorize()
b = (data['b'].values == 'Y')

pd.DataFrame(dict(a=a, avg=np.bincount(i, b) / np.bincount(i)))

   a       avg
0  1  0.666667
1  2  0.500000