Python 从数据框中提取Frozenset项

Python 从数据框中提取Frozenset项,python,pandas,frozenset,Python,Pandas,Frozenset,我有以下数据帧: 我想将列“先行项”和“结果”转换为字符串,删除“frozenset({…})”格式,因此,对于所有行: “VENTOLIN S.INAL200D 100MCG”,而不是frozenset({“VENTOLIN S.INAL200D 100MCG”}) 我通过以下方式实现了目标: prod = [] for i in df["antecedents"]: prod.append(str(i)) new_set = {x.replace('frozenset', ''

我有以下数据帧:

我想将列“先行项”和“结果”转换为字符串,删除“frozenset({…})”格式,因此,对于所有行:

“VENTOLIN S.INAL200D 100MCG”,而不是frozenset({“VENTOLIN S.INAL200D 100MCG”})

我通过以下方式实现了目标:

prod = []

for i in df["antecedents"]:
    prod.append(str(i))

new_set = {x.replace('frozenset', ''
                     ).replace('})', ''
                        ).replace('({', ''
                        ).replace("'", "") for x in prod}

有更具Python风格的解决方案吗?

首先将值转换为元组或列表,然后使用:



首先将值转换为元组或列表,然后使用:



不,也可以有两行@jezraelNo,也可以有两行@jezraelCan可以重新格式化它,以便如果有多个值作为先行项出现,则创建两行(例如bbb aaa和aaa aaa)?@AlessandroCeccarelli-同样适用于
结果
?或2个或更多值仅适用于
先行项
?与consequents@AlessandroCeccarelli-Anwer是为pandas 0.25+编辑的。是否可以对其进行重新格式化,以便在出现多个值作为先行项时,创建两行(例如bbb aaa和aaa aaa)?@AlessandroCeccarelli-同样适用于
结果
?或2个或更多值仅适用于
先行项
?与consequents@AlessandroCeccarelli-Anwer为熊猫0.25进行了编辑+
df = pd.DataFrame({
         'antecedents':[frozenset({'aaa', 'bbb'})] * 3 + [frozenset({'nbb'})] * 3,
         'consequents':[frozenset({'ccc'})] * 3 + [frozenset({'nbb', 'ddd'})] * 3,
         'C':[1,3,5,7,1,0],
})
#print (df)

cols = ['antecedents','consequents']
df[cols] = df[cols].applymap(lambda x: tuple(x))
print (df)
  antecedents consequents  C
0  (bbb, aaa)      (ccc,)  1
1  (bbb, aaa)      (ccc,)  3
2  (bbb, aaa)      (ccc,)  5
3      (nbb,)  (nbb, ddd)  7
4      (nbb,)  (nbb, ddd)  1
5      (nbb,)  (nbb, ddd)  0
df1 = (df.explode('antecedents')
         .reset_index(drop=True)
         .explode('consequents')
         .reset_index(drop=True))
print (df1)
   antecedents consequents  C
0          bbb         ccc  1
1          aaa         ccc  1
2          bbb         ccc  3
3          aaa         ccc  3
4          bbb         ccc  5
5          aaa         ccc  5
6          nbb         nbb  7
7          nbb         ddd  7
8          nbb         nbb  1
9          nbb         ddd  1
10         nbb         nbb  0
11         nbb         ddd  0