我有一个简单的数据框,比如:
cens codf codid
0 S01 F01 1
1 S01 F01 2
2 S01 F02 3
3 S01 F03 4
4 S02 F04 5
5 S02 F05 6
我试图根据每个codf
计数在每个组中的分布,从每个cens
组中随机选择一个样本。基本上如果我分组:
In [387]: df.groupby('cens')['codf'].value_counts()
Out[387]:
cens codf
S01 F01 2
F02 1
F03 1
S02 F04 1
F05 1
Name: codf, dtype: int64
在S01 cens
组中,codf
应具有类似向量的(非规范化)概率分布:
[0,33 0,66 0,66]
这意味着1次a的codf
值为2,2次2的codf
值为1。我想得到一个样本,比如说根据之前的分布,每组50%的行。你知道吗
我知道我可以:
df.groupby('cens').apply(lambda x: x.sample(frac=0.5))
但是这里的问题是将前面的向量添加到sample
函数中的weight
关键字中。我试图将它添加到原始数据帧,但到目前为止,我只能添加一个具有相对引用的列。具有列分布(非规范化)的数据帧应显示为:
cens codf codid pdf
0 S01 F01 1 0.33
1 S01 F01 2 0.33
2 S01 F02 3 0.66
3 S01 F03 4 0.66
4 S02 F04 5 1.00
5 S02 F05 6 1.00
然后我就可以写:
df.groupby('cens').apply(lambda x: x.sample(frac=0.5, weight=df['pdf']))
我没有使用
value_count
,因为您想将值赋回原始df,所以我使用transform
相关问题 更多 >
编程相关推荐