Удаление дублирующихся строк, но с сохранением определенных значений Pandas

У вас есть следующие возможности для решения проблемы с CERTIFICATE_VERIFY_FAILED:

  • Используйте HTTP вместо HTTPS.
  • Используйте переменную --cert или CA_BUNDLE для укажите альтернативный комплект СА. Например. вы можете перейти к неудачному URL из веб-браузера и импортировать корневой сертификат в свою систему.
  • Запустить python -c "import ssl; print(ssl.get_default_verify_paths())", чтобы проверить текущий (проверьте, существует ли).
  • OpenSSL имеет (SSL_CERT_DIR, SSL_CERT_FILE), которые могут использоваться для указания другой базы данных сертификатов PEP-476 .
  • Используйте --trusted-host , чтобы отметить хост как доверенный.
  • В Python используйте verify=False для requests.get (см. Проверка сертификата SSL ).
  • Используйте --proxy , чтобы избежать проверки сертификатов.

Подробнее: Обертка TLS / SSL для объектов сокетов - Проверка сертификатов .

0
задан HelloToEarth 16 January 2019 в 14:21
поделиться

3 ответа

Одно из решений, которое приходит на ум, - это сначала отсортировать объединенный кадр данных по годам с помощью функции sortvalues: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values. html затем удаляет дубликаты с параметром keep = 'first'

df.drop_duplicates(subset=['Name', 'Unit', 'Level'], keep="first")
0
ответ дан Pavel Klammert 16 January 2019 в 14:21
поделиться

Используйте sort_values с параметром по умолчанию na_position='last', поэтому следует пропустить, а затем drop_duplicates :

print (df)
    Name  Unit    Year  Level
0    Nik     1     NaN     12
1    Nik     1  2000.0     12
2   John     2  2001.0     11
3   John     2  2001.0     11
4  Stacy     1     NaN      8
5  Stacy     1  1999.0      8

subset = ['Name', 'Unit', 'Level']
df = df.sort_values('Year').drop_duplicates(subset)

Или: [1113 ]

df = df.sort_values(subset + ['Year']).drop_duplicates(subset)

print (df)
    Name  Unit    Year  Level
5  Stacy     1  1999.0      8
1    Nik     1  2000.0     12
2   John     2  2001.0     11

Другое решение с GroupBy.first для возврата первого не пропущенного значения Year для групп:

df = df.groupby(subset, as_index=False, sort=False)['Year'].first()
print (df)
    Name  Unit  Level    Year
0    Nik     1     12  2000.0
1   John     2     11  2001.0
2  Stacy     1      8  1999.0
0
ответ дан jezrael 16 January 2019 в 14:21
поделиться

Я бы посоветовал вам взглянуть на этап создания вашего объединенного набора данных.

При объединении наборов данных вы можете сделать это по нескольким индексам, т. Е.

df = pd.merge(left, right, how='outer', on=['Name', 'Unit', 'Level'],  suffixes=['', '_r'])

С помощью внешнего объединения вы сразу же собираете все наборы данных и удаляете дубликаты. Осталось только объединить столбец Year, который вы можете сделать следующим образом:

df['Year'] = df[['Year', 'Year_r']].apply(lambda x: x['Year'] if (x['Year'] is not np.nan and x['Year'] != '') else x['Year_r'], axis=1)

Это заполнит пробелы, после чего вы сможете просто удалить столбец Year_r.

Преимущество заключается в том, что охватываются не только значения NaN пропущенных лет, но и пропущенные годы, которые представлены в виде пустых строк.

После небольшого рабочего примера:

import pandas as pd
import numpy as np


left = pd.DataFrame({'Name': ['Adam', 'Beatrice', 'Crissy', 'Dumbo', 'Peter', 'Adam'],
                     'Unit': ['2', '4', '6', '2', '4', '12'],
                     'Year': ['', '2009', '1954', '2025', '2012', '2024'],
                     'Level': ['L1', 'L1', 'L0', 'L4', 'L3', 'L10']})

right = pd.DataFrame({'Name': ['Adam', 'Beatrice', 'Crissy', 'Dumbo'],
                     'Unit': ['2', '4', '6', '2'],
                     'Year': ['2010', '2009', '1954', '2025'],
                     'Level': ['L1', 'L1', 'L0', 'L4']})

df = pd.merge(left, right, how='outer', on=['Name', 'Unit', 'Level'],  suffixes=['', '_r'])
df['Year'] = df[['Year', 'Year_r']].apply(lambda x: x['Year'] if (x['Year'] is not np.nan and x['Year'] != '') else x['Year_r'], axis=1)
df
0
ответ дан Uisdean Chapped 16 January 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: