我将尝试使用类似于SQL窗口函数的方式来操作我的数据框。请考虑以下示例集:
import pandas as pd
df = pd.DataFrame({'fruit' : ['apple', 'apple', 'apple', 'orange', 'orange', 'orange', 'grape', 'grape', 'grape'],
'test' : [1, 2, 1, 1, 2, 1, 1, 2, 1],
'analysis' : ['full', 'full', 'partial', 'full', 'full', 'partial', 'full', 'full', 'partial'],
'first_pass' : [12.1, 7.1, 14.3, 19.1, 17.1, 23.4, 23.1, 17.2, 19.1],
'second_pass' : [20.1, 12.0, 13.1, 20.1, 18.5, 22.7, 14.1, 17.1, 19.4],
'units' : ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],
'order' : [2, 1, 3, 2, 1, 3, 3, 2, 1]})
+--------+------+----------+------------+-------------+-------+-------+---------+----------------------+ | fruit | test | analysis | first_pass | second_pass | order | units | highest | highest_fruit_per_ta | +--------+------+----------+------------+-------------+-------+-------+---------+----------------------+ | apple | 1 | full | 12.1 | 20.1 | 2 | g | true | apple, orange | | apple | 2 | full | 7.1 | 12.0 | 1 | g | false | orange | | apple | 1 | partial | 14.3 | 13.1 | 3 | g | false | grape | | orange | 1 | full | 19.1 | 20.1 | 2 | g | true | apple, orange | | orange | 2 | full | 17.1 | 18.5 | 1 | g | false | orange | | orange | 1 | partial | 23.4 | 22.7 | 3 | g | true | orange | | grape | 1 | full | 23.1 | 14.1 | 3 | g | false | orange | | grape | 2 | full | 17.2 | 17.1 | 2 | g | false | orange | | grape | 1 | partial | 19.1 | 19.4 | 1 | g | true | grape | +--------+------+----------+------------+-------------+-------+-------+---------+----------------------+
+--------+------+----------+------------+-------------+-------+-------+---------+---------------------+ | 水果 | 测试 | 分析 | 第一遍 | 第二遍 | 排序 | 单位 | 最高分 | 最高水果 | +--------+------+----------+------------+-------------+-------+-------+---------+---------------------+ | 苹果 | 1 | 全部检测 | 12.1 | 20.1 | 2 | g | true | ["苹果", "橙子"] | | 苹果 | 2 | 全部检测 | 7.1 | 12.0 | 1 | g | false | ["橙子"] | | 苹果 | 1 | 部分检测 | 14.3 | 13.1 | 3 | g | false | ["橙子"] | | 橙子 | 1 | 全部检测 | 19.1 | 20.1 | 2 | g | true | ["苹果", "橙子"] | | 橙子 | 2 | 全部检测 | 17.1 | 18.5 | 1 | g | true | ["橙子"] | | 橙子 | 1 | 部分检测 | 23.4 | 22.7 | 3 | g | true | ["橙子"] | | 葡萄 | 1 | 全部检测 | 23.1 | 22.1 | 3 | g | false | ["橙子"] | | 葡萄 | 2 | 全部检测 | 17.2 | 17.1 | 2 | g | false | ["橙子"] | | 葡萄 | 1 | 部分检测 | 19.1 | 19.4 | 1 | g | false | ["橙子"] | +--------+------+----------+------------+-------------+-------+-------+---------+---------------------+我刚接触pandas,所以肯定有些简单的东西我不知道。
g = df.groupby(['test','analysis'])['second_pass'].agg('idxmax')
可以给你分组后test
和analysis
的second_pass
最大值所在行的索引。不过我现在不确定它是否能检测到并列的情况。 - WGS