熊猫 - 以groupby的频率获取价值

时间:2016-06-03 01:18:49

标签: python pandas group-by pandas-groupby

有人可以帮助我了解熊猫中的(可能)群体。

这是df:

    easy_donor  v_fam   count
0   donor_1_NS  IGHV1   5202376
1   donor_1_NS  IGHV2   1955547
2   donor_1_NS  IGHV3   70426272
3   donor_1_NS  IGHV4   452367
4   donor_1_NS  IGHV5   4842145
5   donor_1_NS  IGHV6   490142
6   donor_1_NS  IGHV7   19708
24  donor_2_NS  IGHV1   31258603
25  donor_2_NS  IGHV2   5295899
26  donor_2_NS  IGHV3   47286417
27  donor_2_NS  IGHV4   44553802

然后我希望每个计数作为按捐献者分组的计数总和的频率。

像:

df.groupby('easy_donor').sum()['count']
easy_donor
donor_1_NS     83394639
donor_2_NS    129191591
donor_3_HS    220549762
donor_3_NS    104821016
donor_4_HS    200444923
donor_4_NS    121287306

然后,如果原始数据框中的每个计数与easy_donor列匹配​​,则除以groupby总和。我是否必须加入原始数据框?

2 个答案:

答案 0 :(得分:5)

尝试:

df.groupby('easy_donor')["count"].apply(lambda x: x / x.sum())

答案 1 :(得分:2)

忘记这个答案!这只是一个想法。不可行

请注意,使用pandas apply的速度令人难以忍受。相反,请尝试使用原生广播

df.groupby(by='easy_donor')['count'] * 1. / df.groupby(by='easy_donor').sum()