Pandas在表格中根据groupby总和计算频率

时间:2015-12-14 22:48:18

标签: python pandas

如果有人可以帮我解决这个问题。我有两个不同的分组声明。

df_base.groupby( ['cdr3_len','Isotype'], as_index=False).sum()

     cdr3_len Isotype    count
0           0     IgG    12148
1           0     IgM    40918
2           1     IgG     4723
3           1     IgM    11107
4           2     IgG     5633
5           2     IgM    17684
6           3     IgG    10332
7           3     IgM    21621
8           4     IgG     9301
9           4     IgM    26348
10          5     IgG   472232
11          5     IgM   351317
12          6     IgG    81520
13          6     IgM   480543
14          7     IgG   263317
15          7     IgM   657392

我希望计数根据不同的groupby语句显示为频率。

df_new = df_base.groupby('Isotype',as_index=False).sum()[['Isotype','count']]
IgG    20315380
IgM    70268132
Name: count, dtype: int64

所以我想要一个名为frequency的新列,它将计数除以同种型的groupby。

类似

df_base['Frequency'] = df_base['count]/df_new[df_new['isotype'] == df_base['isotype']['count']

但显然这不起作用,因为系列长度不一样。任何想法

希望我有道理。

2 个答案:

答案 0 :(得分:1)

尝试在Isotype列上合并group by DF,然后以new_column = column_A / column_B

的格式执行某些操作

答案 1 :(得分:1)

我认为你正在寻找变革:

df_new = df_base.groupby( ['cdr3_len','Isotype'], as_index=False).sum()

# This creates an array of the same length as the original dataset.
df_new['subtotal'] = df_new.groupby('Isotype')['count'].transform(sum)

df_new['freq'] = df_new['count'] / df_new['subtotal']