我有一个熊猫数据帧,看起来像这样:
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