我有以下 Dataframe :
A B C
1 3 2
1 7 7
1 7 7
1 5 4
2 2 1
2 8 8
2 4 5
3 5 3
3 1 9
3 4 4
我试图做的是,对于A列中的每一组相同的值,找到B列中的值等于C列中的值的最后一行,然后返回B = C的LAST行之前的行,包括行本身。所以预期的结果是:
A B C
1 3 2
1 7 7
1 7 7
2 2 1
2 8 8
3 5 3
3 1 9
3 4 4
我已经尝试了下面的代码,但它返回的是B = C的第一行之前的行,而不是最后一行之前的行。
mask = df['B'] == df['C']
df.loc[mask[::-1].groupby(df['A']).cummax()]
2条答案
按热度按时间carvr3hs1#
使用反向的
groupby.cummax
按预期工作:输出:
可复制输入:
错误可能来自具有重复值的索引,在这种情况下,您可以使用底层numpy数组绕过索引对齐,并手动反转输出:
备选输入:
选择第一个相等之前(包括)的所有行
out = df[m1]
。*输出:
yx2lnoni2#
对于我正确的解决方案,这里有一个创建助手列的替代方案:
另一个想法是创建默认索引:
编辑:如果需要所有行在第一个相同的
B
之前,C
列用途: