Python Pandas查找另一个数据框返回多个匹配项

时间:2019-03-15 05:29:29

标签: python pandas dataframe

我有一个具有唯一ID的客户数据框(客户)。

我需要查看已举行的会议的另一个数据框(会议)(使用客户ID查找),并返回最近一次会议的日期。

大多数客户将有多个会议,但有些客户将没有。在这种情况下,我需要返回0。

Customers
id      name
1607    duck
1622    dog
1972    cat
2204    bird
2367    fish
2373    elephant
2386    moose
2413    mammal
2418    man
22120   goldfish
6067    toucan
83340   capybara

会议如下:

meetings
customer_id date       meeting_id
1607        25/02/2019  1235
1607        11/03/2019  2315
1607        11/03/2019  5483
1622        16/11/2018  32125
1972        13/02/2019  6548
2204        4/02/2019   6542
2204        8/11/2018   8755    
2367        22/01/2019  6545
2373        14/12/2018  8766    
2373        18/01/2019  5448
2386        18/02/2019  32125
2386        18/02/2019  5458
2413        6/12/2018   31125
2413        5/03/2019   5183
2418        21/01/2019  3158
2418        23/01/2019  3127
2418        24/01/2019  7878
2418        21/01/2019  7894
2418        31/01/2019  7895
2418        6/03/2019   4548

我想返回客户表,另一列显示最近的会议及其Meeting_id,如下所示:

id      name        most_recent  most_recent_id
1607    duck        11/03/2019   xxxx
1622    dog         16/11/2018   xxxxx
1972    cat         13/02/2019   xxxx
2204    bird        4/02/2019    etc
2367    fish        22/01/2019
2373    elephant    18/01/2019
2386    moose       18/02/2019
2413    mammal      5/03/2019
2418    man         6/03/2019
22120   goldfish    0
6067    toucan      0
83340   capybara    0

尝试了几种不同的方式,通过循环df等,但是没有任何有效的方法 任何帮助表示赞赏! 谢谢。

1 个答案:

答案 0 :(得分:1)

尝试一下

df2=df2.drop_duplicates(subset=['customer_id'],keep='last')
pd.merge(df1, df2, left_on=['id'], right_on=['customer_id'], how='left').rename(columns={'date':'most_recent','meeting_id':'most_recent_id'}).drop('customer_id',1).fillna(0)

您只需要从df2中删除所有重复的记录,并保留最新的记录。然后应用左合并。

O / P:

       id      name most_recent  most_recent_id
0    1607      duck  11/03/2019          5483.0
1    1622       dog  16/11/2018         32125.0
2    1972       cat  13/02/2019          6548.0
3    2204      bird   8/11/2018          8755.0
4    2367      fish  22/01/2019          6545.0
5    2373  elephant  18/01/2019          5448.0
6    2386     moose  18/02/2019          5458.0
7    2413    mammal   5/03/2019          5183.0
8    2418       man   6/03/2019          4548.0
9   22120  goldfish           0             0.0
10   6067    toucan           0             0.0
11  83340  capybara           0             0.0