我想重新列举给定df
中使用某些条件的行。我的问题是这个question的延伸。根据条件枚举每个dtaaframe组的行
的df
示例:
ind seq status
0 1 2 up
1 1 3 mid
2 1 5 down
3 2 1 up
4 2 2 mid
5 2 3 down
6 3 1 up
7 3 2 mid
8 3 3 oth
的df
包含ind
柱代表一个组。 seq
列可能有一些不良数据。这是这样,我想补充另一列seq_corr
根据一些条件来纠正seq
枚举:
- 在
status
列一组中的第一个值等于up
- 在
status
列一组中的最后一个值等于down
或oth
- 在所有其他情况下从
seq
列拷贝数。
我知道这样做的逻辑方法,但我有一些麻烦如何将其转换为Python
。特别是当涉及适当的切片和访问每个组的第一个和最后一个元素时。
下面你可以找到我的工作不代码:
def new_id(x):
if (x.loc['status',0] == 'up') and ((x.loc['status',-1]=='down') or (x['status',-1]=='oth')):
x['ind_corr'] = np.arange(1, len(x) + 1)
else:
x['seq_corr']= x['seq']
return x
df.groupby('ind', as_index=False).apply(new_id)
预期结果:
ind seq status seq_corr
0 1 2 up 1
1 1 3 mid 2
2 1 5 down 3
3 2 1 up 1
4 2 2 mid 2
5 2 3 down 3
6 3 5 up 1
7 3 2 mid 2
8 3 7 oth 3
希望有人能指出我的任何解决方案。
谢谢你的作品非常好!只是一个问题。如果我想在状态不符合任何条件的情况下复制'seq'号码,我该怎么办? – Michal
@Michal用'和'简单替换'或'。 – Dark
@cᴏʟᴅsᴘᴇᴇᴅ我对你的答案做了一些修改。你可以用你的文字编辑它。 – Dark