为了账号安全,请及时绑定邮箱和手机立即绑定

保持到每组值最后一次出现

保持到每组值最后一次出现

青春有我 2022-10-18 17:37:52
这是我的熊猫数据框的简化示例:     User  Binary0   UserA       01   UserA       02   UserA       03   UserA       14   UserA       05   UserA       16   UserA       07   UserA       08   UserB       09   UserB       010  UserB       011  UserB       012  UserB       013  UserB       114  UserB       115  UserB       016  UserC       017  UserC       0对于每个用户,我想在第一次出现 Binary=1 之后删除所有行。注意,会有一些用户没有 Binary=1 的情况,例如本例中的 UserC。输出如下所示:     User  Binary0   UserA       01   UserA       02   UserA       03   UserA       18   UserB       09   UserB       010  UserB       011  UserB       012  UserB       013  UserB       116  UserC       017  UserC       0
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

这是使用groupby自定义函数和进行转换的一种方法:


# check which Binary values are 1 and group the series by User

g = df.Binary.eq(1).groupby(df.User)

# transform to either idxmax or the last index depending

# on whether there are any Trues or not

m = g.transform(lambda x: x.idxmax() if x.any() else x.index[-1])

# index the dataframe where the index is smaler or eq m

out = df[df.index <= m]

print(out)


     User  Binary

0   UserA       0

1   UserA       0

2   UserA       0

3   UserA       1

8   UserB       0

9   UserB       0

10  UserB       0

11  UserB       0

12  UserB       0

13  UserB       1

16  UserC       0

17  UserC       0


查看完整回答
反对 回复 2022-10-18
?
SMILET

TA贡献1796条经验 获得超4个赞

想法是按交换顺序测试连续值的最大值DataFrame.iloc,如果仅0或仅1正确分组值,什么也有效:

def f(x):

    s = x.cumsum()

    return s.eq(s.max())

df = df[df.iloc[::-1].groupby('User')['Binary'].transform(f).sort_index()]

print (df)

     User  Binary

0   UserA       0

1   UserA       0

2   UserA       0

3   UserA       1

8   UserB       0

9   UserB       0

10  UserB       0

11  UserB       0

12  UserB       0

13  UserB       1

16  UserC       0

17  UserC       0


查看完整回答
反对 回复 2022-10-18
  • 2 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号