簡體   English   中英

大於熊貓數據幀中每一行中值的值總和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM