Суммируйте все положительные и все отрицательные значения панд - PullRequest
0 голосов
/ 03 мая 2019

У меня есть следующий фрейм данных (df):

 Row Number                                                                                       
Row 0               0.24             0.16                 -0.18           -0.20            1.24
Row 1               0.18             0.12                 -0.73           -0.36           -0.54
Row 2              -0.01             0.25                 -0.35           -0.08           -0.43
Row 3              -0.43             0.21                  0.53            0.55           -1.03
Row 4              -0.24            -0.20                  0.49            0.08            0.61
Row 5              -0.19            -0.29                 -0.08           -0.16            0.34

Я пытаюсь сложить все отрицательные и положительные числа соответственно, например, sum (neg_numbers) = n и sum (pos_numbers) = x

Я пробовал:

df.groupby(df.agg([('negative' , lambda x : x[x < 0].sum()) , ('positive' , lambda x : x[x > 0].sum())])

безрезультатно.

Как бы я суммировал эти значения?

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 03 мая 2019

Вы можете сделать с

df.mul(df.gt(0)).sum().sum()
Out[447]: 5.0

df.mul(~df.gt(0)).sum().sum()
Out[448]: -5.5

При необходимости сумма по строке

df.mul(df.gt(0)).sum()
Out[449]: 
1    0.42
2    0.74
3    1.02
4    0.63
5    2.19
dtype: float64
2 голосов
/ 03 мая 2019

Еще один способ для общих сумм:

sum_pos = df.to_numpy().flatten().clip(min=0).sum()
sum_neg = df.to_numpy().flatten().clip(max=0).sum()

И для сумм по столбцам:

sum_pos_col = sum(df.to_numpy().clip(min=0))
sum_neg_col = sum(df.to_numpy().clip(max=0))
2 голосов
/ 03 мая 2019

Вы можете сделать

sum_pos = df[df>0].sum(1)
sum_neg = df[df<0].sum(1)

если вы хотите получить суммы по ряду. Если вы хотите суммировать все значения независимо от строк / столбцов, можете использовать np.nansum

sum_pos = np.nansum(df[df>0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...