长度必须匹配才能比较

Lengths must match to compare

比较索引时如何匹配DataFrame的长度?

df[df.index > df[df.a == 5].index] (df 的形状是动态的)

示例:

df = pd.DataFrame([[0, 10], [5, 10], [0, 10], [5, 10], [0, 10], [0, 10]], columns=["a", "b"])

m = df.index > df[df.a == 5].index
df.loc[m, 'b'] -= np.arange(1, m.sum() + 1)

想要的结果:

   a   b
0  0  10
1  5  9
2  0  9
3  5  8
4  0  8
5  0  8

错误发生是因为df[df.a == 5]的长度与df的长度不匹配,所以如下表达式:

df.index > df[df.a == 5].index

无效。两侧必须匹配长度或一侧必须可广播,但如果长度为 5 和 2,那是不可能的。

您似乎希望根据位置“a”等于 5 对行进行分组,然后从“b”中减去组号。在这种情况下,您可以使用 eq + cumsum 代替:

df['b'] -= df['a'].eq(5).cumsum()

输出:

   a   b
0  0  10
1  5   9
2  0   9
3  5   8
4  0   8
5  0   8