【发布时间】:2017-09-17 15:35:48
【问题描述】:
我想使用某些条件重新枚举给定df 中的行。我的问题是这个question 的扩展。
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
希望有人能指出任何解决方案。
【问题讨论】:
标签: python pandas dataframe group-by