Удалите оба значения float64, если они найдены в любом из столбцов Панд - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь удалить все строки, если найдено неуникальное значение. Пример ниже:

    N1  N2
1   2   4
2   4   5
3   6   6
4   8   7
5   10  8
6   12  10
7   NaN 12
8   NaN 14

Так что в этом случае я хочу получить значения 2 5 7 и 14. Также один столбец длиннеечем другой и, следовательно, должен игнорировать NaN.Я в основном хочу найти повторяющиеся значения и удалить как из N1, так и из N2.Вот что я попробовал:

df[~df.N1.isin(['N2'])]

Получил ошибку.Спасибо за вашу помощь.

Кевин

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Создайте фрейм данных из значений, которые вы опубликовали:

import numpy as np
import pandas as pd

df = pd.DataFrame({'N1':[2, 4, 6, 8, 10, 12, np.nan, np.nan], 
                   'N2':[4,5,6,7,8,10,12,14]})

Найдите общие значения:

common = list(set(df['N1']) & set(df['N2']))

Исключите все строки, которые либо N1, либо N2 имеет один из них:

df[(~df["N1"].isin(common)) | (~df["N2"].isin(common))]

Обновление

common = set(df['N1']) & set(df['N2'])
result = list(set(df['N2'])-common) + list(set(df['N1'])-common)
result = [x for x in result if x==x]
0 голосов
/ 24 октября 2018

Быстрое решение:

>> df.stack().drop_duplicates(keep=False).unstack()

    N1    N2
1  2.0   NaN
2  NaN   5.0
4  NaN   7.0
8  NaN  14.0

Как список:

>> df.stack().drop_duplicates(keep=False).values.tolist()

[2.0, 5.0, 7.0, 14.0]
0 голосов
/ 24 октября 2018

Вот как это можно сделать:

from io import StringIO
import pandas as pd

s = '''N1 N2
2 4
4 5
6 6
8 7
10 8
12 10
NaN 12
NaN 14'''

ss = StringIO(s)


df = pd.read_csv(ss, sep=r'\s+')

df = df.dropna()

df[~df.N1.isin(['N2'])]

Вывод: enter image description here

...