获取对应的中位数索引
Get corresponding index of median
我有一个包含一列的 pandas 数据框,我想知道中位数的索引。也就是说,我是这样确定中位数的:
df.median()
这给了我中间值,但我想知道那一行的索引。是否可以确定这一点?对于长度不均匀的列表,我可以搜索具有该值的索引,但对于均匀的列表长度,这是行不通的。有人可以帮忙吗?
这个问题在另一个 post 中被问到,答案基本上是搜索与中位数具有相同值的行。但正如我所说,这不适用于长度相等的列表。
下面是一个最小的例子(我在下面包含了温的建议):
df = pd.DataFrame(np.random.randn(6, 1), columns=list('A'))
df.median()
df.loc[df[0]==df[0].median()]
Out[120]:
Empty DataFrame
Columns: [0]
Index: []
对于奇数长度的数据帧,您可以使用 Wen 的答案。
对于偶数长度的数据帧,这个问题真的没有意义。正如您所指出的,数据框中不存在中位数。但是,您可以按感兴趣的列对数据框进行排序,然后找到两个 "median" 值的索引。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6, 1), columns=list('A'))
df.median()
df.loc[df['A']==df['A'].median()]
df.sort_values(by='A', inplace=True)
df[df['A'] > df['A'].median()].iloc[0]
df[df['A'] < df['A'].median()].iloc[-1]
另一种方法是使用 quantile 函数(方便地默认为 0.5,即中位数)并设置 interpolation
参数,这样它就不会尝试将中点拆分为偶数长度的 DataFrame。
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,1), columns=['A'])
# row nearest to midpoint
df[df['A']==df['A'].quantile(interpolation='nearest')]
# just below the midpoint
df[df['A']==df['A'].quantile(interpolation='lower')]
# just above the midpoint
df[df['A']==df['A'].quantile(interpolation='higher')]
我有一个包含一列的 pandas 数据框,我想知道中位数的索引。也就是说,我是这样确定中位数的:
df.median()
这给了我中间值,但我想知道那一行的索引。是否可以确定这一点?对于长度不均匀的列表,我可以搜索具有该值的索引,但对于均匀的列表长度,这是行不通的。有人可以帮忙吗?
这个问题在另一个 post 中被问到,答案基本上是搜索与中位数具有相同值的行。但正如我所说,这不适用于长度相等的列表。
下面是一个最小的例子(我在下面包含了温的建议):
df = pd.DataFrame(np.random.randn(6, 1), columns=list('A'))
df.median()
df.loc[df[0]==df[0].median()]
Out[120]:
Empty DataFrame
Columns: [0]
Index: []
对于奇数长度的数据帧,您可以使用 Wen 的答案。
对于偶数长度的数据帧,这个问题真的没有意义。正如您所指出的,数据框中不存在中位数。但是,您可以按感兴趣的列对数据框进行排序,然后找到两个 "median" 值的索引。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6, 1), columns=list('A'))
df.median()
df.loc[df['A']==df['A'].median()]
df.sort_values(by='A', inplace=True)
df[df['A'] > df['A'].median()].iloc[0]
df[df['A'] < df['A'].median()].iloc[-1]
另一种方法是使用 quantile 函数(方便地默认为 0.5,即中位数)并设置 interpolation
参数,这样它就不会尝试将中点拆分为偶数长度的 DataFrame。
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,1), columns=['A'])
# row nearest to midpoint
df[df['A']==df['A'].quantile(interpolation='nearest')]
# just below the midpoint
df[df['A']==df['A'].quantile(interpolation='lower')]
# just above the midpoint
df[df['A']==df['A'].quantile(interpolation='higher')]