Как сохранить одну из повторяющихся строк, в которой нет Nan в любом столбце? - PullRequest
0 голосов
/ 23 мая 2019

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

Я пробовал этот код, но он выдает MemoryError, я не уверен, почему:

data[(~data.duplicated())|(data.notnull())]

Я столкнулся с MemoryError.

Пример данных:

data = pd.DataFrame({
        'Loan ID':list('aaabbc'),
        'Customer ID':list('hhhttt'),
        'C':[np.nan,8,9,4,2,3],
        'D':[1,np.nan,5,7,1,np.nan]
})

print (data)
  Loan ID Customer ID    C    D
0       a           h  NaN  1.0
1       a           h  8.0  NaN
2       a           h  9.0  5.0
3       b           t  4.0  7.0
4       b           t  2.0  1.0
5       c           t  3.0  NaN

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Используйте это, чтобы получить то, что вы хотите:

print(data.dropna().drop_duplicates(['Loan ID','Customer ID']))

Вывод:

  Loan ID Customer ID    C    D
2       a           h  9.0  5.0
3       b           t  4.0  7.0

Для получения дополнительной информации см. dropna и drop_duplicates

0 голосов
/ 23 мая 2019

Вы можете использовать:

#specify columns for test dupe values and add keep=False for return all dupes, invert by ~
m1 = ~data.duplicated(subset=['Loan ID','Customer ID'], keep=False)
print (m1)
0    False
1    False
2    False
3    False
4    False
5     True
dtype: bool

#check if not missing rows per rows
m2 = data.notnull().all(axis=1)
print (m2)
0    False
1    False
2     True
3     True
4     True
5    False
dtype: bool

#chain conditions by bitwise OR
df = data[m1 | m2]
print (df)
  Loan ID Customer ID    C    D
2       a           h  9.0  5.0
3       b           t  4.0  7.0
4       b           t  2.0  1.0
5       c           t  3.0  NaN

#if need ony one row per duplicated rows by specified columns
df = df.drop_duplicates(['Loan ID','Customer ID'])
print (df)
  Loan ID Customer ID    C    D
2       a           h  9.0  5.0
3       b           t  4.0  7.0
5       c           t  3.0  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...