我有2个数据框
df1
ID ID2 NUMBER
1 2 null
df2
ID ID2 NUMBER
1 2 1
1 2 2
1 2 3
因此,当在ID1和ID2中进行df1和df2合并时,我会得到重复的列,因为df1在df2中具有3个匹配项。我想为df1分配一个随机数,然后将其用于合并,这样我总是得到1对1的合并。 问题是我的数据集很大,有时df2中只有1行(因此合并工作正常),有时df2中有10+行。我想使用以下方式为df1分配一个数字:
rand(1,len(df1[(df1.ID=1) & (df1.ID2=2]))
答案 0 :(得分:0)
我想我找到了一种解决方案,可以在这里发布,这样其他人可以告诉我是否有更好的方法。
def select_random_row(grp):
ID= grp.ID.iloc[0]
ID2= grp.ID2.iloc[0]
return random.randint(1, len(df1[(df1.ID== ID) & (df1.ID2 == ID2)]))
df2['g'] = df2.groupby(['ID','ID2']).apply(select_random_row)
编辑: 这是在大型数据集上执行缓慢的方法...我决定只在合并前使用drop_duplicates并保持第一个记录。它不是我想要的那样随机,但总比没有好