Python, Pandas: сокращение фрейма данных

#python #pandas #dataframe #pandas-groupby

#python #pandas #фрейм данных #pandas-groupby

Вопрос:

внутри моего приложения у меня есть фрейм данных, который выглядит похожим на это:

Пример:

 id    |    address          |    code_a    |    code_b    |    code_c      |    more columns
1     |    parkdrive 1      |    012ah8    |    012ah8a   |    1345wqdwqe  |    ....
2     |    parkdrive 1      |    012ah8    |    012ah8a   |    dwqd4646    |    ....
3     |    parkdrive 2      |    852fhz    |    852fhza   |    fewf6465    |    ....
4     |    parkdrive 3      |    456se1    |    456se1a   |    856fewf13   |    ....
5     |    parkdrive 3      |    456se1    |    456se1a   |    gth8596s    |    ....
6     |    parkdrive 3      |    456se1    |    456se1a   |    a48qsgg     |    ....
7     |    parkdrive 4      |    tg8596    |    tg8596a   |    134568a     |    ....
 

Как вы можете видеть, каждый адрес может содержать несколько записей внутри моего фрейма данных, code_a и code_b следуют определенному шаблону, и только code_c не соответствует.

То, что я пытаюсь получить, — это фрейм данных, в котором столбец code_c игнорируется, отбрасывается или что-то еще, и весь фрейм данных сводится только к одной записи для каждого адреса … что-то вроде этого:

 id    |    address          |    code_a    |    code_b    |    more columns
1     |    parkdrive 1      |    012ah8    |    012ah8a   |    ...
3     |    parkdrive 2      |    852fhz    |    852fhza   |    ...
4     |    parkdrive 3      |    456se1    |    456se1a   |    ...
7     |    parkdrive 4      |    tg8596    |    tg8596a   |    ...
 

Я попробовал groupby-функцию, но, похоже, это не сработало — или это вообще правильная функция?

Спасибо за вашу помощь и хорошего дня всем вам!

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

1. Я не уверен, что вы пытаетесь сделать? Удалить столбец C?

2. df.drop_duplicates('address').drop(columns=['code_c']) ?

3.Попробуйте drop_duplicates pandas.pydata.org/pandas-docs/stable/reference/api /… затем отбросьте столбец code_c

4. Таким образом, вы потеряете информацию. Например, для первых 2 строк, какой из двух элементов в code_c сохранить? Вы в порядке, если потеряете эту информацию?

Ответ №1:

Вы можете drop_duplicates сделать это

 df.drop_duplicates(subset=[‘address’], inplace=True)
 

Это сохранит только одну запись на адрес

Ответ №2:

Я думаю, что вы ищете

 # in this way you are looking for all the duplicates rows in all columns except for 'code_c'  
df.drop_duplicates(subset=df.columns.difference(['code_c']))

 
 # in this way you are looking for all the duplicates rows ONLY based on column 'address'  
df.drop_duplicates(subset='address')

 

Ответ №3:

Я заметил, что в вашем примере данных, если вы удалите ColumnC, все записи с адресом, например, «parkdrive 1», будут просто дубликатами.

вы должны удалить столбец c:

df.drop('code_c',axis=1,inplace=True)

Затем вы можете удалить дубликаты:

df_clean = df.drop_duplicates()