我想重新列舉給定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