Как удалить строки с повторяющимся ключевым словом?

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных о голосах панд, и мне нужно ограничить количество голосов по каждому электронному письму до 3 в день, удалив строки после их 3-го голосования только за тот же день. Поэтому мне просто нужно было бы удалить четвертую строку для электронной почты «а». Спасибо!

 Date Email Idea
5/25 a     1
5/25 a     2
5/25 a     3
5/25 a     4
5/26 a     2
5/25 b     2
5/25 b     4
 

Комментарии:

1. попробуйте df.groupby([‘Дата’, ‘Электронная почта’]).глава(3)

Ответ №1:

Я попытался повторить ваш пример. Работает следующий подход.

 d = {
    "Date": ["5/25", "5/25", "5/25", "5/25", "5/25", "5/25", "5/25"],
    "Email": ["a", "a", "a", "a", "b", "b", "b"],
    "Idea": [1, 2, 3, 4, 2, 2, 4]
}

df = pd.DataFrame(data=d)
df.groupby(['Date', 'Email']).head(3)
 
     Date    Email   Idea
0   5/25    a       1
1   5/25    a       2
2   5/25    a       3
4   5/25    b       2
5   5/25    b       2
6   5/25    b       4
 

Что выглядит как желаемое поведение.

Ответ №2:

Вы могли бы сделать это следующим образом: сделайте совокупную сумму по группам

 df["Occ_Number"] = df.groupby(['Date','Email']).cumcount() 1
 

что дает:

  Date Email  Idea  Occ_Number
0  25-May     a     1           1
1  25-May     a     2           2
2  25-May     a     3           3
3  25-May     a     4           4
4  26-May     a     2           1
5  25-May     b     2           1
6  25-May     b     4           2
 

и создайте новый df, содержащий строки, максимальные по группам, но исключающие те, которые встречаются только один раз

 df_remove = pd.DataFrame(df.groupby(['Date','Email'], sort=False)['Occ_Number'].max()).reset_index()
df_remove_2 = df_remove[df_remove['Occ_Number']>3]
 

Это дает:

  Date Email  Occ_Number
0  25-May     a           4
 

Теперь удалите df_remove_2 из своего исходного df:

 print (pd.merge(df,df_remove_2, indicator=True, how='outer')
         .query('_merge=="left_only"')
         .drop('_merge', axis=1))
 

который возвращает:

 Date Email  Idea  Occ_Number
0  25-May     a     1           1
1  25-May     a     2           2
2  25-May     a     3           3
4  26-May     a     2           1
5  25-May     b     2           1
6  25-May     b     2           2