如何计算 Pandas 数据帧中一列中两个重复值之间的单元格距离(例如索引)?

How to count the distance in cells (e.g. in indices) between two repeating values in one column in Pandas dataframe?

我有以下数据集。它列出了在心理语言学实验中呈现给参与者的单词(我将每个单词的呈现顺序设置为索引):

data = {'Stimulus': ['sword','apple','tap','stick', 'elephant', 'boots', 'berry', 'apple', 'pear', 'apple', 'stick'],'Order': [1,2,3,4,5,6,7,8,9,10,11]}
df = pd.DataFrame(data, columns = ['Stimulus', 'Order'])
df.set_index('Order', inplace=True)


       Stimulus
Order   
1      sword
2      apple
3      tap
4      stick
5      elephant
6      boots
7      berry
8      apple
9      pear
10     apple
11     stick

这个数据集中的一些值是重复的(例如苹果),一些不是。问题是我需要根据每次出现的重复值之间的顺序列计算单元格中的距离,并将其存储在单独的列中,如下所示:

       Stimulus  Distance
Order   
1      sword     NA
2      apple     NA
3      tap       NA
4      stick     NA
5      elephant  NA
6      boots     NA
7      berry     NA
8      apple     6
9      pear      NA
10     apple     2
11     stick     7

实施起来应该不难,但我被卡住了。最初,我制作了一个重复项字典,其中我将项目存储为键并将它们的索引存储为值:

{'apple': [2,8,10],'stick': [4, 11]}

然后我没能找到将这些值放入列中的解决方案。如果有更简单的方法可以在不使用字典的情况下循环执行此操作,请告诉我。我将不胜感激任何建议。

Stimulus 上使用 df.groupby 然后 transform Order 列使用 pd.Series.diff:

df = df.reset_index()
df['Distance'] = df.groupby('Stimulus').transform(pd.Series.diff)
df = df.set_index('Order')

# print(df)
       Stimulus  Distance
Order                    
1         sword       NaN
2         apple       NaN
3           tap       NaN
4         stick       NaN
5      elephant       NaN
6         boots       NaN
7         berry       NaN
8         apple       6.0
9          pear       NaN
10        apple       2.0
11        stick       7.0