从具有给定中位数的数据帧创建数据区间

问题描述 投票:0回答:1

我有一个很大的主题数据框。为了简单起见,我在下面发布了我的数据框的较小修改版本。

subject   age   sex   
A         5.35  Female
B         5.70  Male
C         6.00  Female
D         6.07  Male
E         6.25  Male
F         6.88  Male
G         7.00  Female
H         7.02  Male
I         7.11  Female
J         8.00  Male
K         8.50  Female

我正在编写一个函数,它将输入

age
tail
(最终使用我拥有的大数据框输入
sex
)。所需的输出是从数据框中过滤出来的区间数据框,年龄输入是区间的中位数,
tail
是中位数两侧的数据点数量,
age
输入。

df.loc
并不完全是我想要的。示例功能如下:

def interval_set(age = 7, tail = 3):
   # take dataframe above and output below:

Out[1]:

subject   age   sex   
D         6.07  Male
E         6.25  Male
F         6.88  Male
G         7.00  Female
H         7.02  Male
I         7.11  Female
J         8.00  Male

提前致谢!

python pandas median
1个回答
0
投票

如果我理解正确的话,您需要在最接近目标的值之前和之后有 3 (

tail
) 个值(
age
,此处为 7)。

你可以

sort_values
,然后用
abs
差和
idxmin
得到最接近目标的点,最后用布尔索引进行选择:

def interval_set(df, age=7, tail=3):
    s = df['age'].sort_values()
    idx = np.arange(len(s))-s.sub(age).abs().idxmin()
    return df.loc[s.index[abs(idx)<=tail]]

out = interval_set(df)

输出:

  subject   age     sex
3       D  6.07    Male
4       E  6.25    Male
5       F  6.88    Male
6       G  7.00  Female
7       H  7.02    Male
8       I  7.11  Female
9       J  8.00    Male
© www.soinside.com 2019 - 2024. All rights reserved.