我有两个Pandas数据帧,并希望在一个键上交叉(也就是内连接)。我理解Pandas数据框merge()
是如何工作的,但我遇到的问题是我希望保留一个数据框中的列,而不是两个列中的列。
例如,假设我有以下两个数据框:df_users
和df_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
任何帮助都将不胜感激。
答案 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