Подсчет вхождений элемента в одном кадре данных в другом - PullRequest
0 голосов
/ 11 мая 2018

У меня сейчас проблема, и я надеюсь, что кто-нибудь может помочь.В настоящее время есть 2 кадра данных длиной в сотни тысяч строк.(один имеет более 200 КБ и один более 180 КБ).больший из 2-х фреймов данных будет содержать уникальные значения пользователей, в то время как меньший из них, например, не так:

df1:
user1
user2
user3
user4
user5

df2:
user1
user1
user5
user4
user5
user5

Что мне нужно сделать, это взять каждого пользователя из df1 и эффективно проверить, если оннаходится в df2 и сколько раз это происходит.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Использование 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
0 голосов
/ 11 мая 2018

Используйте 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

Настройка

df1 = pd.Series(list('12345')).radd('user').to_frame('user')
df2 = pd.Series(list('115455')).radd('user').to_frame('user')
0 голосов
/ 11 мая 2018

Предполагая, что соответствующий столбец в каждом DataFrame называется 'user', вы можете использовать

pd.merge(
    df1,
    df2.user.groupby(df2.user).count(),
    left_on='user',
    right_index=True,
    how='left')

Пояснение:

  • groupby + count найдет количество вхождений каждого пользователя. Он создаст DataFrame, индекс которого - пользователь, а значение - количество.

  • Объединение влево объединяет полученный DataFrame с df1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...