Python 我想申请吗?

Python 我想申请吗?,python,pandas,Python,Pandas,我有一个数据框,有许多受试者完成了一系列试验(1:800),我想添加一个“块”列。。。每个区块有80次试验。我觉得滚动申请可能是解决办法,但我似乎无法让它起作用 如果两个增量之间的每一个“试用”值都设置在某个块上,我可以做一些事情,但滚动应用似乎应该做到这一点。我真的很想这样做,但这是不可能的: grouped = df.groupby('sid') df['block'] = pd.rolling_cumcount(grouped, 80) 有10个区块和800个试验 blocks = ra

我有一个数据框,有许多受试者完成了一系列试验(1:800),我想添加一个“块”列。。。每个区块有80次试验。我觉得滚动申请可能是解决办法,但我似乎无法让它起作用

如果两个增量之间的每一个“试用”值都设置在某个块上,我可以做一些事情,但滚动应用似乎应该做到这一点。我真的很想这样做,但这是不可能的:

grouped = df.groupby('sid')
df['block'] = pd.rolling_cumcount(grouped, 80)
有10个区块和800个试验

blocks = range(10)
increments = range(800)[0::80]
我有这个:

  SID  Trial  
    1    0      
    1    1      
    1    2      
    1    3      
    1    4      
    1    5      
    2    0      
    2    1      
    2    2      
    2    3      
    2    4      
    2    5  
我想要的结果是(只有我有10个区块,每个区块有80个试验):

谢谢


我最后只是这样做,这可能不是一个最佳解决方案,但效果很好:

# add a block to each subject
block = np.arange(1,11)
block_array = np.repeat(block, 80)
blocks_all = np.tile(block_array, df['sid'].nunique())
df['block'] = blocks_all
我会使用groupby的:

只需将其设置为列:

In [13]: df['Block'] = df.groupby(['SID', 'Trial']).cumcount()

我知道这是可能的。显然,我是熊猫队的新手——我很欣赏他们的快速反应!和熊猫玩得开心,太棒了!如果这个答案有帮助的话,你可能会想“接受”这个答案:事实上,我没有完全正确地解释我的问题。我不能用“SID”和“Trial”来表示cumcount(),因为我希望前80次试验是“block”=0,然后接下来的80次试验是“block”=1,依此类推,这就是为什么我认为滚动应用会更好的原因。我将编辑我的帖子以反映。谢谢我不明白。听起来你可以再加一个专栏,还有groupby(还有cumcount)?谢谢你的建议-我只是同意了-K
In [11]: g = df.groupby(['SID', 'Trial'])

In [12]: g.cumcount()
Out[12]: 
0     0
1     0
2     0
3     1
4     1
5     1
6     0
7     0
8     0
9     1
10    1
11    1
dtype: int64
In [13]: df['Block'] = df.groupby(['SID', 'Trial']).cumcount()