gpt4 book ai didi

Python pandas - 在 groupby 之后过滤行

转载 作者:IT老高 更新时间:2023-10-28 21:54:44 45 4
gpt4 key购买 nike

例如,我有下表:

index,A,B
0,0,0
1,0,8
2,0,8
3,1,5
4,1,3

A分组后:

0:
index,A,B
0,0,0
1,0,8
2,0,8

1:
index,A,B
3,1,5
4,1,3

我需要的是从每个组中删除行,其中列 B 中的数字小于组列 B 中所有行的最大值。好吧,我在将这个问题翻译成英文时遇到了问题,所以这里是示例:

0 组中B 列中行的最大值:8

所以我想删除索引 0 的行并保留索引 12

的行

1 组中B 列中行的最大值:5

所以我想删除索引 4 的行并保留索引 3

的行

我曾尝试使用pandas过滤功能,但问题是它一次对组中的所有行进行操作:

data = <example table>
grouped = data.groupby("A")
filtered = grouped.filter(lambda x: x["B"] == x["B"].max())

所以我理想情况下需要一些过滤器,它会遍历组中的所有行。

感谢您的帮助!

附:还有没有办法只删除组中的行而不返回 DataFrame 对象?

最佳答案

您只需要在 groupby 对象上使用 apply。我修改了您的示例数据以使其更加清晰:

import pandas
from io import StringIO

csv = StringIO("""index,A,B
0,1,0.0
1,1,3.0
2,1,6.0
3,2,0.0
4,2,5.0
5,2,7.0""")

df = pandas.read_csv(csv, index_col='index')
groups = df.groupby(by=['A'])
print(groups.apply(lambda g: g[g['B'] == g['B'].max()]))

哪些打印:

         A  B
A index
1 2 1 6
2 4 2 7

关于Python pandas - 在 groupby 之后过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27488080/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com