选择其中一个以上值在另一个DataFrame中的行

时间:2018-06-05 14:22:41

标签: python pandas dataframe

我有一个DataFrame,其格式如下:

      day         u           a
 0 2018-03-01   5658599  suggestion
 1 2018-03-01  10405594  suggestion
 2 2018-03-01   4142545  suggestion
 3 2018-03-01  10397546  suggestion
 4 2018-03-01  10296737  suggestion

我想选择出现在{/ p>中的(day, u)

     user_id access_date access_platform
 0  10405592  2018-03-01             IOS
 1  10405594  2018-03-01         ANDROID
 2  10405593  2018-03-01         ANDROID
 3  10405596  2018-03-01         ANDROID
 4  10405597  2018-03-01         ANDROID

uuser_id与同一行的dayaccess_date相同。

DataFrames是巨大的,有没有一种有效的方法可以不需要逐行迭代数据帧?

(day, u)的条目可以在DataFrame中多次出现,还有其他字段无法显示。

2 个答案:

答案 0 :(得分:2)

一种方式是内部合并:

res = df1.merge(df2, how='inner', left_on=['day', 'u'],
                right_on=['access_date', 'user_id'])\
         .loc[:, df1.columns]

print(res)

          day         u           a
0  2018-03-01  10405594  suggestion

答案 1 :(得分:1)

使用mergedrop_duplicates一起删除A中可能存在的重复项:

DataFrame
df1 = df1.drop_duplicates(subset=['day','u'])
df2 = df2.drop_duplicates(subset=['access_date','user_id'])
df = df2.merge(df1, left_on=['access_date','user_id'], right_on=['day','u'])[['day','u']]

print (df)
          day         u
0  2018-03-01  10405594

如果想要所有列:

@piRSquareds comment solution
df = (df1.merge(df2.rename(columns={'user_id': 'u', 'access_date': 'day'}))[['day','u']])

print (df)
          day         u
0  2018-03-01  10405594