根据另一个数据框中的数据将值分配给pandas列

时间:2018-07-18 07:53:19

标签: python pandas dataframe

我有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]))

1 个答案:

答案 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并保持第一个记录。它不是我想要的那样随机,但总比没有好