Удалить повторяющиеся строки, сохранить первую строку

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

Проблема в том, что иногда два или более руководителей округа работают в течение одного года. Я хочу удалить эти полудублирующиеся строки. Я ВСЕГДА хочу оставить руководителя округа, который указан первым.

Если мой начальный df:

df <- data.frame(year= c(2000, 2001, 2001, 2002, 2000, 2001, 2002, 2002, 2002),
                  executive.name= c("Johnson", "Smith", "Peters", "Alleghany", "Roberts", "Clarke", "Tollson", "Brown", "Taschen"),
                  district= c(1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002))

Я хочу, чтобы это выглядело так

df.neat <- data.frame(year= c(2000, 2001, 2002, 2000, 2001, 2002),
                  executive.name= c("Johnson", "Smith", "Alleghany", "Roberts", "Clarke", "Tollson"),
                  district= rep(c(1001, 1002), each=3))

Не уверен, какое отношение имеет этот повторяющийся вопрос. Разве это не вопрос о сохранении только первого значения и удалении всех последующих дубликатов? Пока тот отвечает, как удалить все дубликаты? Например. - df.neat == df[!duplicated(df[c("year","district")]),] кажется соответствует.

thelatemail 16.07.2024 23:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете добиться этого, используя функцию drop_duplicates в pandas, которая поможет вам удалить повторяющиеся строки на основе столбцов year и district, сохранив при этом первое вхождение. Вот как это можно сделать на Python:

import pandas as pd

# Create the initial DataFrame
df = pd.DataFrame({
    'year': [2000, 2001, 2001, 2002, 2000, 2001, 2002, 2002, 2002],
    'executive.name': ['Johnson', 'Smith', 'Peters', 'Alleghany', 'Roberts', 'Clarke', 'Tollson', 'Brown', 'Taschen'],
    'district': [1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002]
})

# Drop duplicates while keeping the first occurrence
df_neat = df.drop_duplicates(subset=['year', 'district'], keep='first').reset_index(drop=True)

# Display the resulting DataFrame
df_neat

В результате df_neat будет выглядеть так:

   year executive.name  district
0  2000        Johnson      1001
1  2001          Smith      1001
2  2002      Alleghany      1001
3  2000        Roberts      1002
4  2001         Clarke      1002
5  2002        Tollson      1002

Этот код гарантирует, что для каждой комбинации year и district сохраняется только первое вхождение главы округа, эффективно удаляя любые полудублирующиеся строки.

Ответ принят как подходящий

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

library(dplyr)
df_neat <- df %>%
  group_by(district, year) %>%
  slice_head(n = 1) %>%
  ungroup()

Или в одну строку, df |> dplyr::slice(1, .by = c(district, year))

Jon Spring 16.07.2024 19:24

База R

first = \(x) x[1L]
aggregate(.~year+district, df, first)
#>   year district executive.name
#> 1 2000     1001        Johnson
#> 2 2001     1001          Smith
#> 3 2002     1001      Alleghany
#> 4 2000     1002        Roberts
#> 5 2001     1002         Clarke
#> 6 2002     1002        Tollson

Другие вопросы по теме