我有一个如下所示的数据帧df:
ID1 ID2 Bool Count
0 12868123 387DB71C 0 1
1 12868123 84C0E502 1 11
2 12868123 387DB71C 1 1
8 12868123 80A9DCFC 0 16
9 12868123 7A260136 1 20
10 12868123 80A9DCFC 0 16
11 12868123 80BB4591 0 36
327295 8617B7D9 76A08B0E 0 19
327296 8617B7D9 76A08B0E 0 19
327297 8617B7D9 76D0DA26 1 2
327298 8617B7D9 7C92B2A6 1 3
327299 8617B7D9 75883296 1 1
327300 8617B7D9 78711A4F 0 12
327301 8617B7D9 78711A4F 0 12
327302 8617B7D9 78711A4F 0 12
我想做两件事:
1-我想"随机"为每个n
实例提取(ID1, Bool)
个唯一行。
因此,如果n = 2
,可能的结果可能是:
ID1 ID2 Bool Count
0 12868123 387DB71C 0 1
8 12868123 80A9DCFC 0 16
1 12868123 84C0E502 1 11
2 12868123 387DB71C 1 1
327295 8617B7D9 76A08B0E 0 19
327296 8617B7D9 76A08B0E 0 19
327297 8617B7D9 76D0DA26 1 2
327298 8617B7D9 7C92B2A6 1 3
我试着寻找df.groupby(' ID1',' Bool')。随机(size = n),但无法想象它进行。
2-然后我想计算每个Count
对的平均值(ID1, Bool)
。因此,最终得到的DF是:
ID1 Bool AverageCount
0 12868123 0 8.5
1 12868123 1 6
2 8617B7D9 0 19
3 8617B7D9 1 2.5
我想我有第二部分想通了:
df.groupby(['ID1','Bool'])['Count'].mean()
答案 0 :(得分:3)
groupby
+ sample
df.groupby(
['ID1', 'Bool']
).apply(
lambda df: df.sample(2).Count.mean()
).reset_index(name='AverageCount')
答案 1 :(得分:3)
您可以将groupby
与numpy.random.choice
:
n = 2
df1 = df.groupby(['ID1', 'Bool'])['Count'] \
.apply(lambda x: np.mean(np.random.choice(x, n))) \
.reset_index(name='AverageCount')
print (df1)
ID1 Bool AverageCount
0 12868123 0 18.5
1 12868123 1 6.0
2 8617B7D9 0 19.0
3 8617B7D9 1 3.0