我有以下数据集。它列出了在心理语言学实验中呈现给参与者的单词(我将每个单词的呈现顺序设置为索引)。
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. 如果有更简单的方法可以在循环中完成,而不使用字典,请告诉我。我将感激任何建议。
使用。df.groupby
关于 Stimulus
然后 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