Python Pandas- Groupby列可在Pandas数据框列中获得两个峰值

时间:2018-08-04 18:54:02

标签: python pandas

我正在使用Python Pandas对名为“ Trace”的列进行分组。对于每条迹线,都有一个“值”列,其中包含两个要转移到另一个数据帧的峰。第一个问题是,当我使用groupby时,它不会保留我要选择的值行中的其余数据。例如,如果一个Pandas数据框有6列,那么我想在使用groupby之后保留所有6列。第二个问题是,我想要的两个最大值不是列中的两个最大值,而是数据集中的“峰值”。例如,所附图像显示了我想要的两个峰。我希望将两个峰中每个峰的最大值导出到一个新的数据框中,并将前一个数据框中其他列的行值导出到新数据框中。

在下面的代码中,我想对“ Trace”列进行分组,并在“ Value”列中选择两个峰,同时在选择峰后仍保留“ Sample”列。我要选择的峰对于迹线1是52和21,对于迹线2是61和23。

d = {"Trace": [1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2], "Sample": [1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12], "Value": [1,2,3,7,52,33,11,4,2,21,10,3,3,7,15,61,37,16,6,3,11,23,4]}

有什么建议吗?我一直在使用.groupby(“ Trace”)和.nlargest()。PEaks

1 个答案:

答案 0 :(得分:1)

“峰值”的选择使我感到困惑,除非您对Trace值进行硬编码,但我认为您不会走得很远。

以更明智的姿态,对于在这里搜索的人,我将发布解决方案,以获取groupbynlargest-在您使用时获取所有字段-

df.groupby(['Trace']).apply(lambda x: x.nlargest(2, columns=['Value']))

输出

          Sample  Trace  Value
Trace                         
1     3        4      1     12
      4        5      1      9
2     13       4      2     15
      14       5      2     11

在这里,如果要通过Value分组的Trace列查找两个“峰值”值,那么这应该是一个优雅的解决方案