Pandas:合并(或内部联接)两个数据框,但只保留一列

时间:2018-01-18 00:49:05

标签: python pandas

我有两个Pandas数据帧,并希望在一个键上交叉(也就是内连接)。我理解Pandas数据框merge()是如何工作的,但我遇到的问题是我希望保留一个数据框中的列,而不是两个列中的列。

例如,假设我有以下两个数据框:df_usersdf_valid_users

df_users                     df_valid_users

user_id  email  dob          user_id last_login 
-------  -----  ---          ------- ----------
123      ...    ...          456     ...
456      ...    ...          710     ...
789      ...    ...

Desired result:

user_id  email  dob
-------  -----  ---
456      ...    ...

只要df_users也在df_users.user_id中,我想从df_valid_users获取所有列。

我尝试使用pandas.merge(),但结果包含两个数据框中的列。如何只保留左数据框中的列?我的真实数据有几十列,而不仅仅是这个例子中的一些。

import pandas as pd

rows_users = [ ['123', 'foo', '1970-01-01'],
               ['456', 'bar', '1980-01-01'],
               ['789', 'baz', '1990-01-01']]
df_users = pd.DataFrame(rows_users, columns=['user_id', 'email', 'dob'])
df_users
#   user_id email         dob
# 0     123   foo  1970-01-01
# 1     456   bar  1980-01-01
# 2     789   baz  1990-01-01

rows_valid_users = [ ['456', '2018-01-10'],
                     ['710', '1918-01-02']]
df_valid_users = pd.DataFrame(rows_valid_users, columns=['user_id', 'last_login'])
df_valid_users
#   user_id  last_login
# 0     456  2018-01-10
# 1     710  1918-01-02


pd.merge(df_users, df_valid_users, how='inner', on=['user_id'])
#   user_id email         dob  last_login
# 0     456   bar  1980-01-01  1918-01-02

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为你需要isin :-)

df_users.loc[df_users['user_id'].isin(df_valid_users['user_id']),:]
Out[37]: 
  user_id email         dob
1     456   bar  1980-01-01