Pandas groupby至少具有一个常见元素的列表列表

时间:2020-04-23 08:37:12

标签: python pandas list dataframe aggregate

我正在分析名称对应于其手机号码列表的CSV文件。Dataframe

现在,我希望将此数据集按“ phone_number”分组,其中列表中至少一个数字与其他数字匹配。

例如,**如果ABC博士的电话号码为['1234','3456','7890'] 其中一个样本和ABC博士的电话号码= ['7676','1234','8765'] 在其他示例中,这些行应汇总为“ 1234” 常见。尽管没有匹配的行也应保留

按这样的电话号码分组后,所需的输出是 rx_id的列表。可以使用pandas groupby()完成此操作吗?或其他技巧。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

IIUC,您可以使用explodeduplicated

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