我有一个每小时几列的数据框。我想提取我数据框中每年特定列的10个上限值的整个行(包含所有列)。
到目前为止,我运行了以下代码:
df = df.groupby([df.index.year])['totaldemand'].apply(lambda grp: grp.nlargest(10)))
这里的问题是,我只获得该特定列每年的前10个值,而丢失其他列。如何进行此操作并使其他列的对应值与“ totaldemand”列中每年的前10个值相对应?
答案 0 :(得分:1)
我们通常在head
之后做sort_values
df = df.sort_values('totaldemand',ascending = False).groupby([df.index.year])['totaldemand'].head(10)
答案 1 :(得分:0)
获取查询索引并将其用作原始df
上的掩码:
idx = df.groupby([df.index.year])['totaldemand'].apply(lambda grp: grp.nlargest(10))).index.to_list()
df.iloc[idx,]
(或扩展的内容,我现在无法在没有任何测试数据的情况下进行测试)
答案 2 :(得分:0)
最大可以应用于每个组,将列传递以查找 最大值。
所以运行:
df.groupby([df.index.year]).apply(lambda grp: grp.nlargest(3, 'totaldemand'))
当然,在最终版本中,将 3 替换为您的实际值。