我有一个熊猫数据框,其中有2列“ a”,“ b”和N行。 我将这些点绘制在图表“ b”与“ a”中,得到如图所示的点分布(请注意,我没有描述该分布曲线的数学表达式)。 我想找到我得到的分布的顶部边缘上的所有点(即描述曲线轮廓的点)。 对于给定的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”的点具有非常不同的值,因此结果是我无法获得正确的分布曲线。 这是我得到的结果图像: 我想再次将每个'a'点与其5个(或更多)最近的邻居分组,并在该组中找到最大值'b'('b_max'),然后仅接受坐标为('a','b_max' )。 但是我不太喜欢这种解决方案,因为我会降低分布的采样率,而且可能会失去一些要点。 还有其他方法可以解决我的问题吗?
感谢您的咨询
安德里亚