查找熊猫中一列的所有可能的成对组合,并在另一列中将它们各自的单元格相乘



我有一个熊猫数据帧,看起来像这样:

ID    Ref     Num_Ref
X     A       2
X     B       3
X     C       1
Y     A       1
Y     C       2

我想在每个ID内找到Ref上所有可能的对。对于每一对,将他们的参考数(Num_Ref(乘以彼此。因此,对于上述数据帧,结果如下所示:

ID    Ref_pairs   Num_Ref_pairs
X     A_B         6          
X     A_C         2 
X     B_C         3 
Y     A_C         2

注意:Ref_pairs的存储方式无关紧要。它可以是字符串或元组...只要它们是按字母顺序排列的,所以我可以将它们与其他类似的对进行比较。

重新创建数据

df = pd.DataFrame(
{
"ID": ["X", "X", "X", "Y", "Y"],
"Ref": ["A", "B", "C", "A", "C"],
"Num_Ref": [2, 3, 1, 1, 2,],
}
)

循环访问组并创建组合

import itertools
df_res = []
for id_group, df_group in df.groupby("ID"):
for comb in itertools.combinations(df_group["Ref"], 2):
df_res.append(
{
"ID": id_group,
"Ref_pairs": "_".join(comb),
"Num_Ref_pairs": df_group[df_group.Ref.isin(comb)].product().Num_Ref,
}
)
df_res = pd.DataFrame(df_res).set_index("ID")
print(df_res)
ID    Ref_pairs   Num_Ref_pairs
X     A_B         6          
X     A_C         2 
X     B_C         3 
Y     A_C         2

最新更新