Как дополнительно отфильтровать фрейм данных после использования подсчета группировок и значений - PullRequest
1 голос
/ 11 июля 2020

В настоящее время я работаю с огромным набором данных, и у меня возникли проблемы с фильтрацией данных. У меня есть фрейм данных, который выглядит примерно как

Name  Activity
John  Cleaning
Mary  Driving
Peter Cleaning 
John  Driving

и так далее для миллиона строк. Я применил df.groupby('Name')['activity'].valuecounts() и получил фрейм данных, который выглядит как

Name  Activity
John  Cleaning 3
      Driving  2
      Walking  1
Mary  Cleaning 1
      Driving  1 
      Walking  1
Peter Cleaning 1

. Я хотел бы дополнительно отфильтровать это, извлекая только те имена, которые имеют максимальное количество значений для действий больше 1, но я не уверен как это сделать. Т.е. в этом примере я хочу получить только Джона в качестве вывода, я был бы признателен за любую помощь

1 Ответ

0 голосов
/ 11 июля 2020

Если каждая строка выглядит как Name Activity и других столбцов нет, то на самом деле вам нужно отфильтровать имена на основе того, включены ли они в какие-либо повторяющиеся строки. Один из способов сделать это:

df = pd.DataFrame([["John",  "Cleaning"], 
     ["John",  "Cleaning"], 
     ["Mary", "Driving"], 
     ["Mary", "Cleaning"], 
     ["Mary", "Walking"], 
     ["John", "Driving"],
     ["Peter", "Cleaning"], 
     ["John", "Driving"], 
     ["John", "Cleaning"],
     ["John", "Walking"]],
     columns=["Name", "Activity"])

result = df[
  df['Name'].isin(df[df.duplicated()]['Name'])
  ].groupby('Name')['Activity'].value_counts()

print(result)

Если у вас есть другие столбцы, которые вы здесь просто не показываете, вы можете использовать duplicated(subset=["Name", "Activity"]).

Вывод:

Name  Activity
John  Cleaning    3
      Driving     2
      Walking     1

РЕДАКТИРОВАТЬ

Если все, что вам нужно, это имена и ни одно из действий, вы можете использовать

df[df.duplicated()]['Name'].unique()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...