在Pandas DataFrame中编号子序列

时间:2017-10-09 17:20:05

标签: python pandas

我有一个读数 DataFrame,它由两列experimentvalue组成。 experiment个键进入实验 DataFrame;连续500行具有相同的experiment和不同的value,表示同一实验中的500个读数,其中DF中的顺序是数据的获取顺序。然后500用于下一个实验,等等。

我想在实验中寻找基于时间的趋势,因此我假设我想在0-499中标记每个点pos,然后标记groupby('pos')。如何创建pos列,每次experiment重置时,递增值重置为0?我猜,这与experiment为常量的行数相同。

1 个答案:

答案 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