如何计算 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
我有以下数据集。它列出了在心理语言学实验中呈现给参与者的单词(我将每个单词的呈现顺序设置为索引):
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