用熊猫找出点分布的顶部边缘

时间:2019-05-02 09:58:36

标签: python pandas pandas-groupby

我有一个熊猫数据框,其中有2列“ a”,“ b”和N行。 我将这些点绘制在图表“ b”与“ a”中,得到如图所示的点分布(请注意,我没有描述该分布曲线的数学表达式)。enter image description here 我想找到我得到的分布的顶部边缘上的所有点(即描述曲线轮廓的点)。 对于给定的a值,它对应于b的几个值,因此我对“ a”进行分组,得到每个组的最大值“ b”。 这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
import os
import numpy as np

#initializzation
path = 'my_folder'
tracks = os.listdir(path)

fig = plt.figure(figsize=(18.5, 9.9))

#functions
def read_track(i):
    track_path = '/'.join([path,tracks[i]])
    df = pd.read_csv(track_path, delimiter=';')
    df = remove_negative(df)
    return df

#I just want positive value for b
def remove_negative(df):
    df.loc[df['b']<=0, 'b'] = 0
    return df

def find_profile(df, min, max):
    max_b = df.groupby(['a'])['b'].max()
    max_b = max_b[min:max].reset_index()   
    return max_b.loc[max_b['b'] > 0]

#code execution with the first sample (0)

df = read_track(0)
profile = find_profile(df, 0, 10)

不幸的是,在“ b”中有些接近“ a”的点具有非常不同的值,因此结果是我无法获得正确的分布曲线。 这是我得到的结果图像:ana 我想再次将每个'a'点与其5个(或更多)最近的邻居分组,并在该组中找到最大值'b'('b_max'),然后仅接受坐标为('a','b_max' )。 但是我不太喜欢这种解决方案,因为我会降低分布的采样率,而且可能会失去一些要点。 还有其他方法可以解决我的问题吗?

感谢您的咨询

安德里亚

0 个答案:

没有答案