gpt4 book ai didi

python - 如何将 Pandas 数据框单元格的内容与前一个单元格(或其他预先指定的距离)进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:28 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框,其中包含一列 ID(1 和 2)和一列单词列表。我试图在预先指定的位置找到两个单元格之间的单词交集:

import pandas as pd
df = pd.DataFrame({'ID': ['S1','S2','S1','S2','S1','S2','S1','S2'], 'words': [['apple', 'orange'],
['apple', 'pear'],['melon', 'pineapple'],['apple', 'melon'],['melon', 'fig'],
['plum', 'fig'],['melon', 'apple'],['apple', 'pineapple']]})

更具体地说,在上面的 DF 中,我想将每个单元格中的单词(我们称之为 pos:0)与前一个单元格中的单词(我们称之为 pos: -1)进行比较,然后存储在与 pos:0 单元格同一行的新列(称为“匹配项”)中同时出现的单词。

例如,第二行包含单词“apple”和“pear”。 'Apple' 也出现在前一行,但 'pear' 没有。因此,我希望“apple”出现在第二行中名为“matches”的列中。

如果可能的话,我希望能够设置一个“距离”测量值,这样我就可以比较彼此之间不同距离的单元格。例如,如果前一行是 -1,那么之前的行将是 -2、-3、-4 等。

我目前正在 Pandas 中这样做,但我不知道这是否明智。到目前为止,我没有真正的代码来说明我的努力,因为我真的不知道从哪里开始。

最佳答案

使用Groupby.transform用于创建两个列表之间的匹配项:

s1=df.ID.eq('S1')
groups=s1.cumsum()
df['matches']=( df.groupby(groups)
.transform(lambda x: list(set(x.iat[0]) & set(x.iat[1])))
.words
.where(~s1) )
print(df)

ID words matches
0 S1 [apple, orange] NaN
1 S2 [apple, pear] [apple]
2 S1 [melon, pineapple] NaN
3 S2 [apple, melon] [melon]
4 S1 [melon, fig] NaN
5 S2 [plum, fig] [fig]
6 S1 [melon, apple] NaN
7 S2 [apple, pineapple] [apple]

详细信息:

print(groups)

0 0
1 0
2 1
3 1
4 2
5 2
6 3
7 3
Name: ID, dtype: int64

关于python - 如何将 Pandas 数据框单元格的内容与前一个单元格(或其他预先指定的距离)进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58671734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com