[英]sum of values larger than median of each row in pandas dataframes
有沒有一種有效的方法來找到絕對值大於熊貓數據幀中行的中位數的值之和?
例如:
Monday Tuesday Wednesday Thursday Friday Saturday
0 2.2 4.4 0.5 9 4 3
1 2 4 1 8 4 5
2 1.8 4.5 0.9 8 1 15
3 4 1 5 10 4 5
…
如何生成每行中大於相應行中位數的數字總和? 25%或75%呢?
我想你想要這個:
In [19]:
df[df.gt(df.median(axis=1), axis=0)]
Out[19]:
Monday Tuesday Wednesday Thursday Friday Saturday
0 NaN 4.4 NaN 9 4 NaN
1 NaN NaN NaN 8 NaN 5
2 NaN 4.5 NaN 8 NaN 15
3 NaN NaN 5 10 NaN 5
這使用大於的.gt
並將median
(通過傳遞軸= 1的行)用作值。
然后可以調用sum
:
In [20]:
df[df.gt(df.median(axis=1), axis=0)].sum()
Out[20]:
Monday NaN
Tuesday 8.9
Wednesday 5.0
Thursday 35.0
Friday 4.0
Saturday 25.0
dtype: float64
由於您想對每一行中的值求和,該值大於中位數,並且如果您想保留“天”值,則以下方法可以正常工作
def func(row):
return row[row>np.percentile(row, 50)].sum()
func
函數現在將應用於df
In [67]: df['rule'] = df.apply(func, axis=1)
In [68]: df
Out[68]:
Monday Tuesday Wednesday Thursday Friday Saturday rule
0 2.2 4.4 0.5 9 4 3 17.4
1 2.0 4.0 1.0 8 4 5 13.0
2 1.8 4.5 0.9 8 1 15 27.5
3 4.0 1.0 5.0 10 4 5 20.0
而且,對於不同的分位數,您可以在np.percentile(row, x)
使用[25,50,75]
並增強@EdChum的答案以獲得分位數:
quantile = 0.75 # 0.25, 0.5, 0.75, etc.
df[df.gt(df.quantile(q=quantile, axis=1), axis=0)].sum(axis=1)
鑒於一周中只有7天,除非您的列數超出顯示的數量,否則我不確定這樣做是否會按預期進行。 是否要按列而不是按行分位數?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.