【发布时间】:2016-04-16 14:39:34
【问题描述】:
我正在尝试像使用 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]})
+--------+------+----------+------------+--------- ----+-------+-------+
|水果| 高分辨率照片| CLIPARTO测试 |分析 |第一通|第二通|订购 |单位 |
+--------+------+----------+------------+--------- ----+-------+-------+
|苹果| 高分辨率照片| CLIPARTO 1 |满| 12.1 | 20.1 | 2 |克 |
|苹果| 高分辨率照片| CLIPARTO 2 |满| 7.1 | 12.0 | 1 |克 |
|苹果| 高分辨率照片| CLIPARTO 1 |部分 | 14.3 | 13.1 | 3 |克 |
|橙色 | 1 |满| 19.1 | 20.1 | 2 |克 |
|橙色 | 2 |满| 17.1 | 18.5 | 1 |克 |
|橙色 | 1 |部分 | 23.4 | 22.7 | 3 |克 |
|葡萄| 高分辨率照片| CLIPARTO 1 |满| 23.1 | 14.1 | 3 |克 |
|葡萄| 高分辨率照片| CLIPARTO 2 |满| 17.2 | 17.1 | 2 |克 |
|葡萄| 高分辨率照片| CLIPARTO 1 |部分 | 19.1 | 19.4 | 1 |克 |
+--------+------+----------+------------+--------- ----+-------+-------+
我想添加几列:
- 一个布尔列,用于指示该测试和分析的 second_pass 值是否是所有水果类型中最高的。
- 另一列列出了每个测试和分析组合中哪些水果的 second_pass 值最高。
使用这个逻辑,我想得到下表:
+--------+------+----------+------------+--------- ----+-------+-------+---------+-------- --+ |水果| 高分辨率照片| CLIPARTO测试 |分析 |第一通|第二通|订购 |单位 |最高 |最高水果 | +--------+------+----------+------------+--------- ----+-------+-------+---------+-------- --+ |苹果| 高分辨率照片| CLIPARTO 1 |满| 12.1 | 20.1 | 2 |克 |真实 | [“苹果”,“橙色”] | |苹果| 高分辨率照片| CLIPARTO 2 |满| 7.1 | 12.0 | 1 |克 |假 | [“橙色”] | |苹果| 高分辨率照片| CLIPARTO 1 |部分 | 14.3 | 13.1 | 3 |克 |假 | [“橙色”] | |橙色 | 1 |满| 19.1 | 20.1 | 2 |克 |真实 | [“苹果”,“橙色”] | |橙色 | 2 |满| 17.1 | 18.5 | 1 |克 |真实 | [“橙色”] | |橙色 | 1 |部分 | 23.4 | 22.7 | 3 |克 |真实 | [“橙色”] | |葡萄| 高分辨率照片| CLIPARTO 1 |满| 23.1 | 22.1 | 3 |克 |假 | [“橙色”] | |葡萄| 高分辨率照片| CLIPARTO 2 |满| 17.2 | 17.1 | 2 |克 |假 | [“橙色”] | |葡萄| 高分辨率照片| CLIPARTO 1 |部分 | 19.1 | 19.4 | 1 |克 |假 | [“橙色”] | +--------+------+----------+------------+--------- ----+-------+-------+---------+------- --+我是 pandas 的新手,所以我确定我错过了一些非常简单的东西。
【问题讨论】:
-
希望我能提供进一步的帮助,但此刻不知所措。在我的脑海中,
g = df.groupby(['test','analysis'])['second_pass'].agg('idxmax')将为您提供second_pass最大值的行的索引,这些行由test和analysis分组。我现在不知道它是否可以检测到关系。