我使用Python Pandas对一个名为"Trace“的列进行分组。对于每个跟踪,都有一个包含两个峰值的"Value“列,我试图将它们传输到不同的数据帧中。第一个问题是,当我使用groupby时,它不会保留我想要选择的值所在行的其余数据。例如,如果一个Pandas数据帧有6列,那么我想在使用groupby之后保留所有6列。第二个问题是,我想要的两个最大值不是列中的两个最大值,而是数据集中的“峰值”。例如,附加的图像显示了我想要其值的两个峰值。我希望将两个峰值中每个峰值的最大值导出到新的数据帧中,并将先前数据帧中其他列的行值导出到新的数据帧中。
在下面的代码中,我希望按"Trace“列分组,并在"Value”列中选取两个峰值,同时在选择峰值后仍保留"Sample“列。对于Trace 1,我想选择的峰值是52和21,对于Trace 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()。
发布于 2018-08-05 05:08:28
选择“峰值”让我感到困惑,除非你硬编码跟踪值,否则我认为你不会走得太远。
站在更明智的立场上,对于在这里搜索的人,我会发布获取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
分组的两个“峰值”值,这应该是一个很好的解决方案
https://stackoverflow.com/questions/51688665
复制相似问题