我目前遇到了一个问题,并希望有人可以提供帮助。目前有2个数据帧的项目长达数十万行。 (一个超过20万,一个超过180k)。 2个数据帧中较大的一个将包含用户的唯一值,而较小的数据帧则不包含例如:
df1:
user1
user2
user3
user4
user5
df2:
user1
user1
user5
user4
user5
user5
我需要做的是从df1中获取每个用户并有效地查看它是否在df2中以及它发生了多少次。
谢谢!
答案 0 :(得分:7)
使用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
答案 1 :(得分:2)
使用# initial dataframe
df_start <- data.frame(
id = c("as", "as", "as", "as", "as", "bs", "bs", "bs", "bs", "bs"),
b = c(NA, NA, NA, NA, "A", NA, NA, 6, NA, NA),
c = c(2, NA, NA, NA, NA, 7, NA, NA, NA, NA),
d = c(NA, 4, NA, NA, NA, NA, 8, NA, NA, NA),
e = c(NA, NA, NA, 3, NA, NA, NA, NA, "B", NA),
f = c(NA, NA, 5, NA, NA, NA, NA, NA, NA, 10))
# desired output
df_end <- data.frame(id = c("as", "bs"),
b = c("A", 6),
c = c(2, 7),
d = c(4, 8),
e = c(3,"B"),
f = c(5, 10))
和pd.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
答案 2 :(得分:1)
假设每个DataFrame中的相关列都被称为'user'
,您可以使用
pd.merge(
df1,
df2.user.groupby(df2.user).count(),
left_on='user',
right_index=True,
how='left')
说明:
groupby
+ count
会找到每个用户的出现次数。它将创建一个DataFrame,其索引是用户,值是count。
合并左 - 将生成的DataFrame合并到df1
。