Pandas fuzzy merge/match name column, with duplicates

前端 未结 3 1547
离开以前
离开以前 2020-12-16 05:44

I have two dataframes currently, one for donors and one for fundraisers. I\'m trying to find if any fundraisers also gave donations, a

3条回答
  •  情深已故
    2020-12-16 06:21

    Here's a bit more pythonic (in my view), working (on your example) code, without explicit loops:

    def get_donors(row):
        d = donors.apply(lambda x: fuzz.ratio(x['name'], row['name']) * 2 if row['Email'] == x['Email'] else 1, axis=1)
        d = d[d >= 75]
        if len(d) == 0:
            v = ['']*3
        else:
            v = donors.ix[d.idxmax(), ['name','Email','Date']].values
        return pd.Series(v, index=['donor name', 'donor email', 'donor date'])
    
    pd.concat((fundraisers, fundraisers.apply(get_donors, axis=1)), axis=1)
    

    Output:

                     Date           Email        name donor name     donor email           donor date
    0 2013-03-27 10:00:00          a@a.ca    John Doe   John Doe          a@a.ca  2013-03-01 10:39:00
    1 2013-03-01 10:39:00          a@a.ca    John Doe   John Doe          a@a.ca  2013-03-01 10:39:00
    2 2013-03-02 10:39:00          d@d.ca  Kathy test   Kat test          d@d.ca  2013-03-27 10:39:00
    3 2013-03-03 10:39:00    asdf@asdf.ca   Tes Ester                                                
    4 2013-03-04 10:39:00  something@a.ca    Jane Doe   Jane Doe  something@a.ca  2013-03-04 10:39:00
    

提交回复
热议问题