长度必须匹配才能比较
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
比较索引时如何匹配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