Pandas groupby в списке списков, по крайней мере, с одним общим элементом - PullRequest
0 голосов
/ 23 апреля 2020

Я анализирую CSV-файл с именами, соответствующими списку их мобильных номеров. Dataframe

Теперь я sh сгруппируюсь по этому набору данных по номеру «phone_number», где хотя бы одно из чисел в списке совпадает с другими.

Например, ** если д-р AB C имеет номер_телефона = ['1234', '3456', '7890'] в одном из образцов, а д-р AB C имеет номер телефона = ['7676', '1234', '8765'] в другом примере, эти строки должны быть объединены вместе, так как '1234' является общим. Хотя строки без какого-либо соответствия также должны быть сохранены

Требуемый вывод - это список rx_id после группировки по номеру phone_number, как это. Можно ли это сделать с помощью pandas groupby ()? или какой-то другой трюк. Спасибо за помощь !!

1 Ответ

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

IIU C вы можете использовать explode и duplicated:

df = pd.DataFrame({"doctor_name":["Dr. ABC","Dr. ABC", "Dr. Who","Dr. Strange"],
                   "phone_number":[['1234','3456','7890'],['7676','1234','8765'], np.NaN, ["8697059406"]]})

df = df.explode("phone_number")

s = df["doctor_name"].value_counts()

print (df[df.duplicated("phone_number")|df["doctor_name"].isin(s[s.eq(1)].index)]) #add .groupby("doctor_name").agg(list) if you want them back into a list

   doctor_name phone_number
1      Dr. ABC         1234
2      Dr. Who          NaN
3  Dr. Strange   8697059406
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...