问题描述
出于某些复杂的原因,我需要从一个熊猫数据框中采样,在其中我将一个特定的变量call_id分组,然后对给定的变量num_days(从调用开始算起的天数)应用一些逻辑。>
通常来说,我想使用类似〜负指数方案的方法,其中天数越高,行被采样的可能性就越低。这是一个说明我的采样方案的函数:
import numpy as np
import matplotlib.pyplot as plt
span = [i for i in range(1,31)]
x = [1/(1+np.log(i)) for i in span]
import random
def sampler(days):
weights = [selector[day] for day in days]
coin_flips = [random.uniform(0,1) for i in range(len(days))]
samples = [days[i] for i in range(len(days)) if weights[i] >= coin_flips[i]]
return samples
days = [i for i in range(1,31)]
sampler(days)
>>>
[1,2,3,7,9,12,17,24,25,26]
如该函数所示,最接近0的数字被采样的可能性最高,并且概率衰减是平滑的。
我陷入困境的地方是将此函数合并到groupby
和sample
方法中,我引用了一个半相似的问题Sample each group after pandas groupby
假设一个数据框:
df = pd.DataFrame({'days': [1,4,5,6,8,10,11,13,14,15],'class': [1,1,3],'value': [1,0]})
grouped = df.groupby('class')
grouped.apply(lambda x: x.sample(sampler(days)))
这显然行不通;我对最好的前进方式感到困惑。有什么建议吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)