我有一只像熊猫一样的熊猫
df_test = pd.DataFrame({'A': 'a a a b b'.split(), 'B': ['Y','N','Y','Y','N']})
我想要的输出是df_test2 = pd.DataFrame({'A': 'a b'.split(), 'B': [2/3,1/2]})
你怎么做groupby()。用A列申请得到B栏中'Y'的百分比?
我一直在搜索groupby.apply()但到目前为止没有任何工作谢谢!
一种方法可能是
In [10]: df_test.groupby('A').B.apply(lambda x: (x == 'Y').mean())
Out[10]:
A
a 0.666667
b 0.500000
或者,如果你不介意在这个过程中改变df_test
,
In [15]: df_test['C'] = df_test.B == 'Y'
In [17]: df_test.groupby('A').C.mean()
Out[17]:
A
a 0.666667
b 0.500000
Name: C, dtype: float64
使用带有布尔掩码的GroupBy.mean
,其中True
s是像1
这样的过程,不需要新列,因为也是将Series
df_test["A"]
传递给groupby
:
注意:
相反,==
使用eq
更清晰的语法。
df = df_test["B"].eq('Y').groupby(df_test["A"]).mean().reset_index()
print (df)
A B
0 a 0.666667
1 b 0.500000