Как отбросить строки, которые не являются точными дубликатами, но не содержат новой информации (больше NaN) - PullRequest
0 голосов
/ 16 января 2020

Моя цель - свернуть таблицу ниже в один столбец. В частности, для этого вопроса я спрашиваю, как я могу разумно удалить желтую строку, поскольку она является дубликатом серой строки, хотя и содержит меньше информации.

Таблица содержит три категориальные переменные и 6 аналитических / количественных переменных. Столбцы C1 и C2 - единственные переменные, которые должны соответствовать для успешного объединения; все из . Все пустые ячейки - это NaN, и python код для копирования приведен ниже.

Вопрос 1 . (Желтый) Вся количественная информация, хранящаяся в желтой строке, также сохраняется в серой строке. Серый ряд имеет больше информации. Есть ли способ интеллектуально удалить строку этого типа, похожую на функцию Pandas drop_duplicates? Гипотетическим вариантом будет df.drop_duplicates(subset=df.columns[4:], ignoreNaNs=True)

Смежный вопрос (синий) Как объединить две строки с одинаковыми ключами и дополнительными значениями

Таблица данных

Table for data analysis


Текущий прогресс

Мой текущий код включает эту строку для удаления всех строк, где все количественные переменные имеют значение NaN. df.dropna(subset=df.columns[4:],how='all', inplace=True)

Также эта строка для удаления всех строк, где все количественные переменные одинаковы. df.drop_duplicates(subset=df.columns[4:], inplace=True)

Пример кода, который можно скопировать в IDE.

import pandas as pd

dfO = [['S1','P3','H1',Timestamp('2004-12-04 00:00:00'),-15.0,-27.4,nan,-10.0,-15.0,nan],
 ['S1','P3','H1',Timestamp('2004-12-20 00:00:00'),nan,nan,nan,nan,nan,nan],
 ['S1','P3','H2',Timestamp('2004-12-20 00:00:00'),-15.0,nan,nan,-10.0,nan,nan],
 ['S1','P3','H3',Timestamp('2004-12-07 00:00:00'),nan,nan,nan,nan,-15.0,-8.0],
 ['S1','P3','H1', Timestamp('2004-12-04 00:00:00'), -15.0,-27.4,nan,-10.0, -15.0, nan]]
cols = ['C1 (PK)', 'C2 (FK)', 'C3', 'C4', 'Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6']
df = pd.DataFrame(data=dfO,columns=cols)

df.drop_duplicates(inplace=True)
df.dropna(subset=df.columns[4:],how='all', inplace=True)
df.drop_duplicates(subset=df.columns[4:], inplace=True)
...