Python 3.x 数据帧列转换

Python 3.x 数据帧列转换,python-3.x,pandas,calculated-columns,Python 3.x,Pandas,Calculated Columns,我的输入df如下所示: ID item1 item2 item3 1 a,b b,c b 2 a,c,f b,c b,c,f 3 g,h,i i h,i 4 j,k j,k l ID item1 item2 item3 Final_item 1

我的输入df如下所示:

ID     item1       item2        item3
1      a,b         b,c          b
2      a,c,f       b,c          b,c,f
3      g,h,i       i            h,i
4      j,k         j,k          l
ID     item1       item2        item3       Final_item
1      a,b         b,c          b           a,c
2      a,c,f       b,c          b,c,f       a 
3      g,h,i       i            h,i         g
4      j,k         j,k          l           j,k
item1、item2和item3的df数据类型为字符串类型

我想添加第4列,所需转换如下: 伪代码:

Final\u item=item3-设置[col(item1)+col(item2)]
基本上,在最后一列中,是添加item1和item2,然后应用set删除重复项,然后使用item3列进行减法

所需输出如下:

ID     item1       item2        item3
1      a,b         b,c          b
2      a,c,f       b,c          b,c,f
3      g,h,i       i            h,i
4      j,k         j,k          l
ID     item1       item2        item3       Final_item
1      a,b         b,c          b           a,c
2      a,c,f       b,c          b,c,f       a 
3      g,h,i       i            h,i         g
4      j,k         j,k          l           j,k

首先
拆分
列,并通过
连接列,然后获得压缩系列的列表理解差异:

i3 = df['item3'].str.split(',')
i12 = (df['item1'] + ',' + df['item2']).str.split(',')
df['Final_item'] = [','.join(set(b) - set(a)) for a, b in zip(i3, i12)]
print (df)
   ID  item1 item2  item3 Final_item
0   1    a,b   b,c      b        c,a
1   2  a,c,f   b,c  b,c,f          a
2   3  g,h,i     i    h,i          g
3   4    j,k   j,k      l        j,k

减去哪些列?Temp=添加项1+项2,然后删除重复项。然后item3-Temp(减法)找到最后的_项列。谢谢我的解决方案有效吗?如果没有,为什么输出的第三行是
g,h
?对不起,我已经编辑好了。好的,那么我的答案很好用?谢谢,它很有魅力。当我将pyspark dataframe转换为pandas dataframe时,我必须显式地将所有列的数据类型更改为
df['item1']=test['item1'].astype(str)
,作为第一步。但我对数据集有问题。一些item2值是
none
,它也会打印在最终项目数据上。例如,如果item2值是none,则最终项目列的值为
none,a,h
谢谢,我用空字符串替换了
none