我有一个读数 DataFrame,它由两列experiment
和value
组成。 experiment
个键进入实验 DataFrame;连续500行具有相同的experiment
和不同的value
,表示同一实验中的500个读数,其中DF中的顺序是数据的获取顺序。然后500用于下一个实验,等等。
我想在实验中寻找基于时间的趋势,因此我假设我想在0-499中标记每个点pos
,然后标记groupby('pos')
。如何创建pos
列,每次experiment
重置时,递增值重置为0?我猜,这与experiment
为常量的行数相同。
答案 0 :(得分:1)
如果我理解正确的话......
>>> df = pd.DataFrame({'Experiment' : [1,1,1,2,2,2,2,3,3,3],
'Value' : np.random.randn(10)})
>>> df
Experiment Value
0 1 -0.924851
1 1 -0.599875
2 1 0.069982
3 2 -1.106909
4 2 0.463922
5 2 0.210568
6 2 -0.171456
7 3 -0.768618
8 3 -0.269928
9 3 0.055613
您将使用groupby
后跟cumcount()
来获得所需效果:
>>> df['Position'] = df.groupby('Experiment').cumcount()
>>> df
Experiment Value Position
0 1 -0.924851 0
1 1 -0.599875 1
2 1 0.069982 2
3 2 -1.106909 0
4 2 0.463922 1
5 2 0.210568 2
6 2 -0.171456 3
7 3 -0.768618 0
8 3 -0.269928 1
9 3 0.055613 2