我必须对一个数据帧(df1)进行采样,而我还有另一个数据帧(df2),该数据帧告诉我一天中的每个小时应该检索多少条记录。
例如, df1:
Hour number
0. 00 A
1. 00 B
2. 00 C
3. 01 D
4. 01 A
5. 01 B
6. 01 D
df2:
Hour number
0. 00 1
1. 01 2
最后,我将得到例如午夜记录数字1和凌晨1点记录数字3和5(或任何其他组合,只要尊重df2中的数字)
问题是我需要在一个函数中编写此代码,以便我可以在另一个函数中调用它。
到目前为止,我有
def sampling(frame):
return np.random.choice(frame.index)
但是我无法添加df2的约束。
有人可以帮忙吗?
答案 0 :(得分:1)
首先,我们使用merge
将所需的样本数添加为新列,并将sample
应用于每组Hour
值。最后,我们通过返回除最后一列之外的所有列来删除添加的列:
def sampling(df1, df2):
return df1.merge(df2, on='Hour').groupby('Hour').apply(lambda x: x.sample(x.Number[0])).reset_index(0,True).iloc[:,:-1]
df1 = pd.DataFrame({'Hour': [0,0,0,1,1,1,1], 'Value': list('ABCDABD')})
df2 = pd.DataFrame({'Hour': [0,1], 'Number': [1,2]})
sampling(df1, df2)
结果:
Hour Value
2 0 C
4 1 A
5 1 B