在pandas中集的交集作为列

2024-04-25 21:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个df,比如:

df=pd.DataFrame.from_items([('i', [set([1,2,3,4]), set([1,2,3,4]), set([1,2,3,4]),set([1,2,3,4])]), ('j', [set([2,3]), set([1]), set([4]),set([3,4])])])

所以看起来像

^{pr2}$

我想计算df.I.intersection(df.j)并将其指定为列k。也就是说,我希望:

df['k']=[df.i.iloc[t].intersection(df.j.iloc[t]) for t in range(4)]

>>> df.k
0    {2, 3}
1       {1}
2       {4}
3    {3, 4}
Name: k, dtype: object

有没有数据框应用()为了这个?实际的df是数百万行。在


Tags: nameinfromdataframedfforobjectitems
2条回答

pandas中使用sets、lists和{}s有点问题,因为最好使用标量:

df['k'] = [x[0] & x[1] for x in zip(df['i'], df['j'])]
print (df)
              i       j       k
0  {1, 2, 3, 4}  {2, 3}  {2, 3}
1  {1, 2, 3, 4}     {1}     {1}
2  {1, 2, 3, 4}     {4}     {4}
3  {1, 2, 3, 4}  {3, 4}  {3, 4}

^{pr2}$

含有apply的溶液:

df['k'] = df.apply(lambda x: x['i'].intersection(x['j']), axis=1)
print (df)
              i       j       k
0  {1, 2, 3, 4}  {2, 3}  {2, 3}
1  {1, 2, 3, 4}     {1}     {1}
2  {1, 2, 3, 4}     {4}     {4}
3  {1, 2, 3, 4}  {3, 4}  {3, 4}

可以使用集合差分重现集合交集。 A和B的交集等于A减去A中不在B中的元素(可以用B对称地求)。在

因此,您可以使用dataframesub方法来操作集合差异:

df['k'] = df['i'].sub(df['i'].sub(df['j']))
# df['k'] = df['j'].sub(df['j'].sub(df['i'])) # equivalent

得出预期输出:

^{pr2}$

相关问题 更多 >