Как найти какое-либо общее существующее в Pandas столбце - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть лайки DataFrame ниже:

IDS Metric
1,2  100
1,3  200
3    300
...

Я хочу найти любые два идентификатора, существующие в одной строке, например, как "1,2", так и "1,3" существуют в одном строка, но «2,3» не имеет прямой связи (означает, что между ними нет конкуренции в бизнесе)

Я хочу иметь функцию для оценки любых двух общих идентификаторов, существующих и возвращающих True / False.

Просто для того, чтобы "судить по любым двум существующим общим идентификаторам", я думаю, что может сработать следующее:

 target_list = ['1', '2']
 df["IDS"].apply(lambda ids: all(id in ids for id in target_list)).any()
 # return True

 target_list = ['2', '3']
 df["IDS"].apply(lambda ids: all(id in ids for id in target_list)).any()
 # return False

Однако, поскольку лямбда-функция будет повторять каждую строку в df, и может быть неэффективно повторять все строки, потому что мне нужно только судить, существуют ли. Я надеюсь, что он должен вернуться, когда произойдет первое общее существование.

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

1 Ответ

1 голос
/ 20 апреля 2020

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

df["IDS"].str.split(',', expand=True).isin(target_list).all(axis=1).any()

Еще одна идея с наборами:

target_list = ['1', '2']
s = set(target_list)

a = any(s.issubset(x.split(',')) for x in df["IDS"])
print (a)
True

Подробности :

print (df["IDS"].str.split(',', expand=True))
   0     1
0  1     2
1  1     3
2  3  None

print (df["IDS"].str.split(',', expand=True).isin(target_list))
       0      1
0   True   True
1   True  False
2  False  False

print (df["IDS"].str.split(',', expand=True).isin(target_list).all(axis=1))
0     True
1    False
2    False
dtype: bool

print (df["IDS"].str.split(',', expand=True).isin(target_list).all(axis=1).any())
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...