python - Pandas groupby 获取行匹配条件的组的第一个元素

标签 python pandas group-by aggregate

我有一个数据框,其中一些行除一列外具有所有相同的值。我希望删除重复的行,仅保留该列中值为 1 的每个组中的第一行,或者如果该列中没有值为 1 的值则保留任意行。示例数据:

df = pd.DataFrame({'a': [1, 1, 1, 2, 2, 3, 3], 
                   'b': [0, 1, 2, 3, 4, 5, 6],
                   'c': [0, 1, 0, 0, 0, 1, 1]})

我想要的输出是这样的

df.groupby(['a']).first_where(lambda row: row['c'] == 1).reset_index()

  a b c
0 1 1 1
1 2 4 0
2 3 5 1

最佳答案

您可以使用drop_duplicates

df.sort_values(['a','c']).drop_duplicates(['a'],keep='last')
Out[748]: 
   a  b  c
1  1  1  1
4  2  4  0
6  3  6  1

如果你想使用groupby

df.sort_values(['a','c']).groupby('a',as_index=False).last()
Out[750]: 
   a  b  c
0  1  1  1
1  2  4  0
2  3  6  1

关于python - Pandas groupby 获取行匹配条件的组的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48773602/

相关文章:

sql-server - 在递归 SQL 查询上对多个父/子进行排序

mysql - SQL MYSQL 选择记录排除存在任何重复的行

python - Matplotlib 具有不同字体大小的多行轴文本

python - 从 BS4 中提取并存储为 Python 中的列表元素

python - models.GenericIpAddressField 的默认值

python - 更改 x 轴而不更改 pandas 中的索引

python - 无法安装 RAY

python - 将 Pandas 系列时间戳转换为唯一日期列表

entity-framework - Entity Framework 中的 GROUP 和 SUM

python - 按过滤条件的 Pandas 样本