Python Pandas-以groupby中的频率获取值
有人能帮我做熊猫群比吗 以下是df:Python Pandas-以groupby中的频率获取值,python,pandas,group-by,pandas-groupby,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_
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
然后我希望每个计数都是按捐赠者分组的计数总和的频率
比如:
然后,原始数据帧中的每个计数除以groupby总和(如果它们与easy_列匹配)。我必须加入原始数据帧吗?试试:
df.groupby('easy_donor')["count"].apply(lambda x: x / x.sum())
忘记这个答案!!!这只是一个想法。不可行 请注意,使用
apply
的速度非常慢。相反,请尝试使用本机广播
df.groupby(by='easy_donor')['count'] * 1. / df.groupby(by='easy_donor').sum()
这段代码为我提出了这样的问题:TypeError:对于*:'SeriesGroupBy'和'float'@Mindcraft,不支持的操作数类型,我打赌你忘了
['count']
部分。不,我正是在使用这一行。一个更简单的例子:df=pd.DataFrame({'easy_-provider':['A','A','A','B','B'],'count':[123,50,30,10,20]})df.groupby(by='easy_-provider')['count']*1./df.groupby(by='easy_provider').sum()
@Mindcraft,是的,你是对的,我终于发现这是一个愚蠢的答案,我应该在发布它之前测试一下。谢谢,它能工作。然而,你得到的是一个pd.Series对象,你能帮我得到原始的数据帧格式,只需要用频率替换“count”列吗?
df.groupby(by='easy_donor')['count'] * 1. / df.groupby(by='easy_donor').sum()