Pandas根据groupby计数获取列的值

时间:2017-03-30 06:48:18

标签: python pandas

我有一个名为test的数据框,如此

   ALT_K1 ALT_K2  ALT_K3  HS  VS
    1       A       1      45   2
    1       A       1      32  32
    1      1-1      70     1   1
    1      1-1      70     0   9
    1      A        2      3   0

和我分组前三列并计算出现的频率

test_frequency = test.groupby(['ALT_K1', 'ALT_K2', 'ALT_K3']).size().reset_index(name='count')

我希望能够根据三列组合出现的次数获得列HS和VS的值。例如,对于组合(1,A,1),我希望得到HS [45,32]和VS [2,32]的值

现在被困在这一天两天,并希望得到任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

我认为您需要使用applyunique自定义lambda函数:

test_frequency = test.groupby(['ALT_K1', 'ALT_K2', 'ALT_K3'])
                     .apply(lambda x: pd.Series([x['HS'].unique(),
                                                 x['VS'].unique()], index=['HS','VS']))
                     .reset_index()
print (test_frequency)

print (test_frequency)
   ALT_K1 ALT_K2  ALT_K3        HS       VS
0       1    1-1      70    [1, 0]   [1, 9]
1       1      A       1  [45, 32]  [2, 32]
2       1      A       2       [3]      [0]