在Pandas数据框架中,如何计算一列中两个重复值之间在单元格中的距离(例如指数)?

问题描述 投票:0回答:1

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

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]}

然后我没能找到把这些值放到一列中的解决方案。 And then I failed to find a solution to put those values into a column. 如果有更简单的方法可以在循环中完成,而不使用字典,请告诉我。我将感激任何建议。

pandas duplicates distance
1个回答
0
投票

使用。df.groupby 关于 Stimulus 然后 transformOrder 列使用 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
© www.soinside.com 2019 - 2024. All rights reserved.