作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下数据框,它是较大数据框的一小部分:
acc_num trans_cdi
0 1 c
1 1 d
3 3 d
4 3 c
5 3 d
6 3 d
我想删除最后一项是“d”的所有行。所以我想要的数据框看起来像这样:
acc_num trans_cdi
0 1 c
3 3 d
4 3 c
所以关键是,一个组不应该将“d”作为最后一项。
clean_3 = clean_2[clean_2.groupby('account_num')['trans_cdi'].transform(lambda x: (x.iloc[-1] != "d") | (x.index != x.index[-1]))]
这个问题有更好的解决方案吗?
最佳答案
我们可以使用 idxmax
在这里反转数据[::-1]
然后获取索引:
grps = df['trans_cdi'].ne('d').groupby(df['acc_num'], group_keys=False)
idx = grps.apply(lambda x: x.loc[:x[::-1].idxmax()]).index
df.loc[idx]
acc_num trans_cdi
0 1 c
3 3 d
4 3 c
acc_num trans_cdi
0 1 c
1 1 d <--- d between two c, so we need to keep
2 1 c
3 1 d <--- row to be dropped
4 3 d
5 3 c
6 3 d
7 3 d
grps = df['trans_cdi'].ne('d').groupby(df['acc_num'], group_keys=False)
idx = grps.apply(lambda x: x.loc[:x[::-1].idxmax()]).index
df.loc[idx]
acc_num trans_cdi
0 1 c
1 1 d
2 1 c
4 3 d
5 3 c
仍然给出正确的结果。
关于python - 如何在 Pandas 的组中删除某种类型的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62967408/
我是一名优秀的程序员,十分优秀!