【发布时间】:2018-01-18 00:49:05
【问题描述】:
我有两个 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
任何帮助将不胜感激。
【问题讨论】: