计算另一个数据框中项目的出现次数

时间:2018-05-11 13:32:06

标签: python python-3.x pandas dataframe

我目前遇到了一个问题,并希望有人可以提供帮助。目前有2个数据帧的项目长达数十万行。 (一个超过20万,一个超过180k)。 2个数据帧中较大的一个将包含用户的唯一值,而较小的数据帧则不包含例如:

df1:
user1
user2
user3
user4
user5

df2:
user1
user1
user5
user4
user5
user5

我需要做的是从df1中获取每个用户并有效地查看它是否在df2中以及它发生了多少次。

谢谢!

3 个答案:

答案 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