У меня есть DF с 2 столбцами.Я хочу сделать логическую проверку на это - PullRequest
0 голосов
/ 30 мая 2019

У меня есть DF, который имеет 3 столбца, и я хочу выполнить проверку Boolean. Код показан ниже.

import pandas as pd
df = pd.DataFrame({
    'Col1':[A,A,A,B,B,C,C,C],
    'Col2':[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5], [1, 2, 3, 4, 5,6,7] ,[1, 2, 3, 4, 5,6,7],[1, 2, 3, 4, 5,6,7] ]
    'Col3': [[1, 2, 3, 4],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],[1, 2, 3, 4, 5, 6, 7, 8, 9],[1, 2, 3, 4, 5],[1, 2, 3], [1, 2, 3, 4, 5,6,7] ,[1, 2, 3],[1, 2, 3, 4] ]
})

Мне нужен DF, который дает мне уникальное значение Col1, и если одна строка Col2, Col3 равны, выведите True, иначе False. Результат, который я хотел бы видеть:

'Col1' 'Col2'                         'Col3'          'Col4'                               
  A    [1,2,3,4,5,6,7,8,9,10,11,12]  [1,2,3,4]         False

print(map(type, df['Col2']) == map(type,df['Col3']))

Это вернуло мне значение true, но я хочу его как новый столбец Col4 в df

Для нескольких кодов, которые я пробовал, я всегда находил ошибки как unhashable type: 'list'

Ответы [ 3 ]

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

Если вы хотите применить эту логику для группы Col1, используйте groupby.apply:

df['Col4'] = df.groupby('Col1').apply(lambda x: x['Col2'].eq(x['Col3'])).values

  Col1                                     Col2                                     Col3   Col4
0    A  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]                             [1, 2, 3, 4]  False
1    A  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]   True
2    A  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]              [1, 2, 3, 4, 5, 6, 7, 8, 9]  False
3    B                          [1, 2, 3, 4, 5]                          [1, 2, 3, 4, 5]   True
4    B                          [1, 2, 3, 4, 5]                                [1, 2, 3]  False
5    C                    [1, 2, 3, 4, 5, 6, 7]                    [1, 2, 3, 4, 5, 6, 7]   True
6    C                    [1, 2, 3, 4, 5, 6, 7]                                [1, 2, 3]  False
7    C                    [1, 2, 3, 4, 5, 6, 7]                             [1, 2, 3, 4]  False

Не принимая во внимание группы, выдает тот же результат в этом случае, используя eq

df['Col4'] = df['Col2'].eq(df['Col3'])

  Col1                                     Col2                                     Col3   Col4
0    A  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]                             [1, 2, 3, 4]  False
1    A  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]   True
2    A  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]              [1, 2, 3, 4, 5, 6, 7, 8, 9]  False
3    B                          [1, 2, 3, 4, 5]                          [1, 2, 3, 4, 5]   True
4    B                          [1, 2, 3, 4, 5]                                [1, 2, 3]  False
5    C                    [1, 2, 3, 4, 5, 6, 7]                    [1, 2, 3, 4, 5, 6, 7]   True
6    C                    [1, 2, 3, 4, 5, 6, 7]                                [1, 2, 3]  False
7    C                    [1, 2, 3, 4, 5, 6, 7]                             [1, 2, 3, 4]  False
0 голосов
/ 30 мая 2019

Введите новый способ tuple

df.Col2.map(tuple)==df.Col3.map(tuple)
Out[646]: 
0    False
1     True
2    False
3     True
4    False
5     True
6    False
7    False
dtype: bool
0 голосов
/ 30 мая 2019

Преобразовать в строки для сравнения:

    df['Col4'] = df.Col2.map(str) == df.Col3.map(str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...