我目前遇到一个问题,希望有人能帮助。目前有两个数据框,每个数据框都有数十万行数据(其中一个有超过200k行,另一个有超过180k行)。其中较大的数据框将包含唯一的用户值,而较小的数据框则没有,例如:
df1:
user1
user2
user3
user4
user5
df2:
user1
user1
user5
user4
user5
user5
我需要做的是从df1中取出每个用户,高效地判断它是否存在于df2中,并统计它出现的次数。
谢谢!
我目前遇到一个问题,希望有人能帮助。目前有两个数据框,每个数据框都有数十万行数据(其中一个有超过200k行,另一个有超过180k行)。其中较大的数据框将包含唯一的用户值,而较小的数据框则没有,例如:
df1:
user1
user2
user3
user4
user5
df2:
user1
user1
user5
user4
user5
user5
使用 value_counts
df1['Newcount']=df1['df1:'].map(df2['df2:'].value_counts())
df1
Out[117]:
df1: Newcount
0 user1 2.0
1 user2 NaN
2 user3 NaN
3 user4 1.0
4 user5 3.0
'user'
,那么您可以使用:pd.merge(
df1,
df2.user.groupby(df2.user).count(),
left_on='user',
right_index=True,
how='left')
说明:
groupby
+ count
将找到每个用户出现的次数。它将创建一个DataFrame,其索引是用户,值是计数。
合并将结果DataFrame左连接到df1
上。
df1.join(df2.user.groupby(df2.user).count().rename('Count'), on='user')
- piRSquaredpd.factorize
和 np.bincount
来高效地生成值计数。f, u = pd.factorize(df2.user)
d = dict(zip(u, np.bincount(f)))
df1['Counts'] = df1.user.map(d)
df1
user Counts
0 user1 2.0
1 user2 NaN
2 user3 NaN
3 user4 1.0
4 user5 3.0
df1 = pd.Series(list('12345')).radd('user').to_frame('user')
df2 = pd.Series(list('115455')).radd('user').to_frame('user')
merge_asof
。 - BENY