假设我有以下 Dataframe
df = pd.DataFrame([
(2, 2, 'A', .5),
(2, 2, 'A', .6),
(2, 2, 'B', .75),
(2, 2, 'B', .7),
(2, 2, 'C', .6),
(2, 3, 'A', .65),
(2, 3, 'A', .6),
(2, 3, 'B', .75),
(2, 3, 'B', .7),
(2, 3, 'C', .6)
], columns=['out_size', 'problem_size', 'algo', 'time'])
我也想
- group by `[out_size ','problem_size ',' algo '],对于每个组
- 计算每个
algo
出现的次数,然后 - 选择/保持该组中具有最低平均时间的
algo
,
结果
pd.DataFrame(
[[2, 2, 'A', 0.55],
[2, 3, 'C', 0.6]], columns=['out_size', 'problem_size', 'algo', 'time'])
6条答案
按热度按时间oewdyzsn1#
您可以使用双
groupby
:稍微更有效的替代方案,不需要对值进行排序(但需要存储中间值):
输出:
xqkwcwgp2#
您可以使用两个
groupby
来执行此操作:计算每个组的平均时间。然后您可以按升序对时间进行排序:
然后再次分组(不包括列
algo
)并取每个组的第一个元素:9q78igpj3#
你可以这样做-首先groupby三列,然后按平均值进行agg,然后升序排序,然后你只想取组中的第一个,所以根据out_size和problem_size删除重复项,只保留第一个,这将保证你得到最低的平均值算法,因为它已经排序过了。
或者如果有更多的列都需要average agg,那么
输出:
nr9pn0ug4#
你可以在一行中通过-分组值,排序和分组再次:
输出:
bksxznpy5#
输出:
ztmd8pv56#
输出: