我有一个名为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]的值
现在被困在这一天两天,并希望得到任何帮助。
由于
答案 0 :(得分:0)
我认为您需要使用apply
和unique
自定义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]