简体   繁体   English

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

[英]Pandas - Get value as frequency in groupby

Can someone help me with the (possible) groupby in pandas. 有人可以帮助我(大熊猫)中的(可能的)群体。

Here is the df: 这是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

Then I want each count as a frequency of the sum of the counts grouped by donor. 然后我希望每个计数作为由捐赠者分组的计数总和的频率。

Like: 喜欢:

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

Then each count in the original data frame divided by the groupby sum if they match the easy_donor column. 然后,如果它们与easy_donor列匹配​​,则原始数据帧中的每个计数除以groupby总和。 Do I have to join on original dataframe? 我是否必须加入原始数据框?

尝试:

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

FORGET THIS ANSWER!!! 忘记这个答案! THIS IS JUST AN IDEA. 这只是一个想法。 NOT VIABLE 不可行

Note that using pandas apply is unbearably slow. 请注意,使用pandas apply非常慢。 Instead, try using the native broadcasting . 相反,尝试使用原生广播

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM