Python 熊猫:合并(或内部连接)两个数据帧,但只保留一个数据帧中的列
我有两个熊猫数据帧,希望在一个关键点上相交(也称为内部连接)。我了解Pandas dataframePython 熊猫:合并(或内部连接)两个数据帧,但只保留一个数据帧中的列,python,pandas,Python,Pandas,我有两个熊猫数据帧,希望在一个关键点上相交(也称为内部连接)。我了解Pandas dataframemerge()的工作原理,但我遇到的问题是我希望保留一个数据帧中的列,而不是两个数据帧中的列 例如,假设我有以下两个数据帧,df\u用户和df\u有效用户 df_users df_valid_users user_id email dob user_id last_login ------- ----- ---
merge()
的工作原理,但我遇到的问题是我希望保留一个数据帧中的列,而不是两个数据帧中的列
例如,假设我有以下两个数据帧,df\u用户
和df\u有效用户
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\u用户
中获取所有列,只要df\u用户。用户id
也在df\u有效用户
中
我尝试使用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
任何帮助都将不胜感激。我想您需要
isin
:-)
非常感谢。我猜
isin()
函数必须在左侧数据帧的所有行上运行。这和调用merge()
一样有效吗?通常内部连接是有效实现的(至少在SQL中是如此)。@stackoverflowuser2010根据我的经验,它应该很快,你可以在你这边测试这两种方法并检查时间:-)@YOBEN_S-我们如何将loc
函数用于两个字段的组合,例如df_users.loc[df_users['email','dob'].isin(df_valid_users['email','dob'],:]
?已尝试,但出现关键错误。@user12379095这可能会让您了解方法1和方法22@user12379095df_users.loc[df_users[['email','dob']].apply(元组,1).isin(df_有效_users[['email','dob']].apply(元组,1)),:]
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