Столбец содержит столбец - PullRequest
       11

Столбец содержит столбец

0 голосов
/ 07 февраля 2019

Я хотел бы видеть, содержит ли в каждой строке моего столбца данных значение, которое находится в столбце B.

df = pd.DataFrame({'A': ["Is it 54321?", "Is it 4321?", "Is it 321?"],
                   'B': [54321, 54321, 54321]})

Я пытался:

df["C"] = df["A"] .str .contains(df["B"])

Я хотел бы:

'C': [1,0,0]

Но я получил:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

Ответы [ 5 ]

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

Я принимал различные ответы в этой теме, но у меня были проблемы с ними, как описано здесь: Столбец содержит столбец 1

Спасибо Вэнь-Бену за этот ответ:

Если вы хотите, чтобы 12 было в 123:

df = df.dropna()
df['C'] = [str(y) in x for x , y in zip(df.A,df.B)]
print(df)

Или если вы не хотите, чтобы 12 было в 123:

df = df.dropna()
df['C'] = [str(y) in x for x , y in zip(df.A.str.split(' '),df.B)]
print(df)
0 голосов
/ 07 февраля 2019

В качестве альтернативы:

df['C']=df.A.str.contains(r'\b(?:{})\b'.format('|'.join(df.B.astype(str)))).astype(int)
print(df)

              A      B  C
0  Is it 54321?  54321  1
1   Is it 4321?  54321  0
2    Is it 321?  54321  0
0 голосов
/ 07 февраля 2019

Вот еще один способ сделать это:

df['C'] = (df['B'] == df['A'].str.rstrip('?').str.split(' ').str[-1].astype(int)) * 1
0 голосов
/ 07 февраля 2019

Вы можете упростить код:

def fun (A,B):
    return str(B) in str(A) # Edit: A to str(A)

f = np.vectorize(fun, otypes=[int])
df["C"] = f(df['A'],df['B'])

Или использовать понимание списка:

df["C"] = [int(str(B) in A) for A, B in zip(df['A'],df['B'])]
0 голосов
/ 07 февраля 2019

Я обнаружил, что это работает как функция:

def fun (A,B):
    if str(B) in A:
        return 1
    else:
        return 0
f = np.vectorize(fun, otypes=[float])
df["C"] = f(df['A'],df['B'])
...