Pandas - 在 groupby 中获取作为频率的值
Pandas - Get value as frequency in groupby
有人可以帮我解决 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 总和。我必须加入原始数据框吗?
尝试:
df.groupby('easy_donor')["count"].apply(lambda x: x / x.sum())
忘记这个答案!!!这只是一个想法。不可行
请注意,使用 pandas apply
速度慢得令人无法忍受。相反,请尝试使用原生 broadcasting.
df.groupby(by='easy_donor')['count'] * 1. / df.groupby(by='easy_donor').sum()
有人可以帮我解决 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 总和。我必须加入原始数据框吗?
尝试:
df.groupby('easy_donor')["count"].apply(lambda x: x / x.sum())
忘记这个答案!!!这只是一个想法。不可行
请注意,使用 pandas apply
速度慢得令人无法忍受。相反,请尝试使用原生 broadcasting.
df.groupby(by='easy_donor')['count'] * 1. / df.groupby(by='easy_donor').sum()