A B C
0 blue 14.5 14.0
1 blue 14.0 14.0
2 blue 13.5 14.0
3 blue 12.0 14.0
4 blue 10.5 14.0
5 green 20.0 19.0
6 green 19.0 19.0
7 green 18.5 19.0
8 green 18.0 19.0
9 green 17.5 19.0
10 green 16.0 19.0
我想为df1
每个A组(“蓝色”和“绿色”)使用下一个条件创建一个新的:
如果组中不存在满足条件(B = C-1)的任何B值,请选择下一行对应的下一行。例如,在“蓝色组”中,B = C-1将为14.0-1 = 13.0。由于它不存在任何“蓝色组”,因此请选择位于下方的下一行,即:13.0
df
3 blue 12.0 14.0
df1应该是:
A B C
1 blue 14.0 14.0
3 blue 12.0 14.0
6 green 19.0 19.0
8 green 18.0 19.0
我试过了:
df1 = df[(df["B"] == df["C"]) | (df["B"] == df["C"]-1)]
对于第二个条件:B = C - 1
,
B - C <= -1
,然后在每个组中找到满足此条件的第一行的索引。
idx_cond = df.groupby("A").apply(
lambda x: x.where(x.B-x.C <= -1).first_valid_index())
# A
# blue 3
# green 8
# dtype: int64
pd.concat([df[df.B == df.C], df.loc[idx_cond]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句