Python Pandas: 按中位数值获取行
我想找出某一列中中位数值所在的行。
我使用 data.median() 来获取 'column' 这一列的中位数值。
id 30444.5
someProperty 3.0
numberOfItems 0.0
column 70.0
然后 data.median()['column'] 得到的是:
data.median()['performance']
>>> 70.0
我该如何找到中位数值所在的行或索引呢?有没有类似 idxmax 或 idxmin 的方法?
我试过过滤,但在多行有相同值的情况下,这种方法不太可靠。
谢谢!
2 个回答
5
你可以使用 rank
和 idxmin
,然后把它们应用到每一列上:
import numpy as np
import pandas as pd
def get_median_index(d):
ranks = d.rank(pct=True)
close_to_median = abs(ranks - 0.5)
return close_to_median.idxmin()
df = pd.DataFrame(np.random.randn(13, 4))
df
0 1 2 3
0 0.919681 -0.934712 1.636177 -1.241359
1 -1.198866 1.168437 1.044017 -2.487849
2 1.159440 -1.764668 -0.470982 1.173863
3 -0.055529 0.406662 0.272882 -0.318382
4 -0.632588 0.451147 -0.181522 -0.145296
5 1.180336 -0.768991 0.708926 -1.023846
6 -0.059708 0.605231 1.102273 1.201167
7 0.017064 -0.091870 0.256800 -0.219130
8 -0.333725 -0.170327 -1.725664 -0.295963
9 0.802023 0.163209 1.853383 -0.122511
10 0.650980 -0.386218 -0.170424 1.569529
11 0.678288 -0.006816 0.388679 -0.117963
12 1.640222 1.608097 1.779814 1.028625
df.apply(get_median_index, 0)
0 7
1 7
2 3
3 4
0
可能只需要这样写:data[data.performance==data.median()['performance']]
。