python,寻找数据集的目标值

python, finding target value of the dataset

我有一个示例数据集。这里是:

import pandas as pd
import numpy as np
df = {'Point1': [50,50,50,45,45,35,35], 'Point2': [48,44,30,35,33,34,32], 'Dist': [4,6,2,7,8,3,6]}
df = pd.DataFrame(df)
df

它的输出在这里:

我的目标是为每组 point1 找到 dist 值及其条件和 point2 值。 这是我的代码。 (报错)

if df['dist'] < 5 :
    df1 = df[df['dist'].isin(df.groupby('Point1').max()['Dist'].values)]
else :
    df1 = df[df['dist'].isin(df.groupby('Point1').min()['Dist'].values)]

df1

这是预期的输出:

所以,如果存在小于 5 的 Dist 值,我想取这些组中的最大值。如果没有,我想拿最小的。我希望它会清楚。

由于您使用的是 pandas DataFrame,因此您可以使用括号语法来过滤数据

你的情况:

df[df['Dist']] < 5

关于问题的第二部分,有点混乱,你能解释一下“取这些组中最大的一个。如果没有,我想取最小的”

IIUC,你想找到最接近 5 的 Dist,优先选择小于 5 的值。

为此,您可以计算两列以帮助您按优先级顺序对值进行排序,并取第一列。这里'cond'先按≤5排序,然后按>5排序,cond2按到5的绝对距离排序。

thresh = 5
(df
 .assign(cond=df['Dist'].gt(thresh),
         cond2=df['Dist'].sub(thresh).abs(),
        )
 .sort_values(by=['cond', 'cond2'])
 .groupby('Point1', as_index=False).first()
 .drop(columns=['cond', 'cond2'])
)

输出:

   Point1  Point2  Dist
0      35      34     3
1      45      35     7
2      50      48     4

注意。这也是在此过程中按 Point1 排序,如果这是不需要的,可以创建一个函数以这种方式对数据框进行排序并将其应用于每个组。如果是这种情况请告诉我