我正在使用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]}
答案 0 :(得分:1)
“峰值”的选择使我感到困惑,除非您对Trace值进行硬编码,但我认为您不会走得很远。
以更明智的姿态,对于在这里搜索的人,我将发布解决方案,以获取groupby
,nlargest
-在您使用时获取所有字段-
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
列查找两个“峰值”值,那么这应该是一个优雅的解决方案