我有两个熊猫数据帧。
df1:
d = {'col1': ["A", "A","A","B","B","C"], 'col2': [3, 4,5,6,7,8]}
e = pd.DataFrame(data=d)
df2:
f = {'col1': ["A","B","C"], 'col2': [2,1,1]}
g = pd.DataFrame(data=f)
我想根据col1的每个对应值,根据df2中col2的值从df1中随机选择行。例如,在df2中,A的计数为2,B的计数为1,依此类推。我想随机使用df2和子集df1的此计数值。为了更加明确,子集df1的期望输出是:
col1 col2
0 A 3
1 A 4
2 B 7
3 C 8
以上数据框具有两行A,B的一行和C的一行,同时保留所有列值。
答案 0 :(得分:3)
您可以将样本与参数n一起使用
count = df2.set_index('col1')['col2'].to_dict()
df1.groupby('col1').apply(lambda x: x.sample(n=count[x.name])).reset_index(drop = True)
col1 col2
0 A 4
1 A 3
2 B 6
3 C 8
答案 1 :(得分:2)
我们可以使用reindex
+ numpy
shuffle
,然后使用concat
将结果合并回
np.random.shuffle(e.index.values)
idx=e.index.values
np.random.shuffle(idx)
e=e.reindex(idx)
pd.concat([e[e.col1==x ].iloc[:y,:]for x,y in zip(g.col1,g.col2)])
Out[402]:
col1 col2
5 A 3
1 A 4
3 B 6
2 C 8