我有一个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
u
和user_id
与同一行的day
和access_date
相同。
DataFrames是巨大的,有没有一种有效的方法可以不需要逐行迭代数据帧?
(day, u)
的条目可以在DataFrame中多次出现,还有其他字段无法显示。
答案 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)
使用merge
与drop_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