Сравните две колонки в двух панмах данных - PullRequest
0 голосов
/ 30 марта 2019

У меня есть два кадра данных панд:

df1:
a   b   c
1   1   2
2   1   2
3   1   3

df2:
a   b   c 
4   0   2 
5   5   2 
1   1   2 

df1 = {'a': [1, 2, 3], 'b': [1, 1, 1], 'c': [2, 2, 3]}
df2 = {'a': [4, 5, 6], 'b': [0, 5, 1], 'c': [2, 2, 2]}
df1= pd.DataFrame(df1)
df2 = pd.DataFrame(df2)

Я ищу функцию, которая будет отображать, содержат ли df1 и df2 одно и то же значение в столбце a.

В приведенном мною примере df1.a и df2.a оба имеют a=1.

Если df1 и df2 не имеют записи, где значения в столбце a равнытогда функция должна вернуть None или False.

Как мне это сделать?Я пробовал пару комбинаций panda.merge

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Определите свою собственную функцию, используя isin и any

def yourf(x,y):
    if any(x.isin(y)):
        #print(x[x.isin(y)])
        return x[x.isin(y)]
    else: 
        return 'No match' # you can change here to None

Out[316]: 
0    1
Name: a, dtype: int64

yourf(df1.b,df2.c)
Out[318]: 'No match'
1 голос
/ 30 марта 2019

Вы можете использовать набор пересечения:

def col_intersect(df1, df2, col='a'):
    s1 = set(df1[col])
    s2 = set(df2[col])
    return s1 & s2 else None

Используя merge, как вы пытались, вы можете попробовать это:

def col_match(df1, df2, col='a'):
    merged = df1.merge(df2, how='inner', on=col)
    if len(merged):
        return merged[col]
    else:
        return None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...