Получение ошибки, когда объект с плавающей точкой не повторяется - PullRequest
0 голосов
/ 07 ноября 2019

Привет, я новичок в python and pandas. Здесь у меня есть данные в следующем формате

A                             B
[2000.0, 2000.0]          [2200.0, 0.0, 2200.0]
[2200.0, 0.0, 0.0]        [2200.0, 2200.0, 2200.0]
[2200.0, 2200.0, 2200.0]  [2200.0, 2200.0, 2200.0]
[200.0, 200.0, 200.0]     [200.0, 0.0, 200.0]
[160.0, 160.0, 160.0]     NaN

Здесь я пытаюсь сравнить два массива с одинаковым и уникальным регистром

[2200.0,2200.0,2200.0] and [2200.0, 2200.0, 2200.0]

должен вернуть true

но [2200.0,0.0,0.0] и [2200.0,0.0,0.0] должны вернуть мне false. ТАК, есть ли способ сделать это?

----> 2     if set(A) == set(B):

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Я думаю, вы можете заменить отсутствующие значения пустыми списками перед сравнением:

df_out[['A','B']] = df_out[['A','B']].applymap(lambda x: [] if x != x else x)

Или:

df_out[['A','B']] = df_out[['A','B']].applymap(lambda x: x if isinstance(x, list) else [])
#alternative
#df_out[['A','B']] = df_out[['A','B']].applymap(lambda x: [] if isinstance(x, float) else x)

print (df_out)

                          A                         B
0     [2000.0, 2000.0, 0.0]     [2200.0, 0.0, 2200.0]
1        [2200.0, 0.0, 0.0]  [2200.0, 2200.0, 2200.0]
2  [2200.0, 2200.0, 2200.0]     [200.0, 200.0, 200.0]
3     [200.0, 200.0, 200.0]       [200.0, 0.0, 200.0]
4     [160.0, 160.0, 160.0]                        []

Тестирование :

def comp(A,B):
    try:
        a= set(A)
        b= set(B)
        return ((a == b) and (len(a) == 1) and (len(b) == 1))
    except TypeError:
        return False

Или:

def comp(A,B):
    try:
        return (set(A) == set(B)) and (len(set(A)) == 1) and (len(set(B)) == 1)
    except TypeError:
        return False

for ins, rw in df_out.iterrows():
    val = comp(rw.Previous_Three, rw.Next_Three)
    print (val)
    False
    False
    True
    False
    False
0 голосов
/ 07 ноября 2019

Если вы имеете в виду в вопросе, который хотите узнать для каждой строки, совпадают ли уникальные значения столбца A и B, введите:

df_out['is_same'] = df_out.apply(lambda x: set(x['A']) == set(x['B']), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...