У меня есть список;
orig= [2, 3, 4, -5, -6, -7]
Я хочу создать другую, где записи, соответствующие положительным значениям выше, являются суммой положительных значений, а записи, соответствующие отрицательным значениям выше, являются суммой отрицательных значений. Таким образом, желаемый результат:
final = [9, 9, 9, 18, 18, 18]
Я делаю это:
raw = pd.DataFrame(orig, columns =['raw'])
raw
raw
0 2
1 3
2 4
3 -5
4 -6
5 -7
sum_pos = raw[raw> 0].sum()
sum_neg = -1*raw[raw < 0].sum()
final = pd.DataFrame(index = raw.index, columns = ['final'])
final
final
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
final.loc[raw >0, 'final'] = sum_pos
KeyError: "[('r', 'a', 'w') ('r', 'a', 'w') ('r', 'a', 'w') ('r', 'a', 'w')\n ('r', 'a', 'w') ('r', 'a', 'w')] not in index"
Итак, в основном я пытался создать пустой фрейм данных, например raw, а затем заполнить его условно. Тем не менее, вышеуказанный метод не работает.
Даже когда я пытаюсь создать новый coolumn вместо нового df, он терпит неудачу:
raw.loc[raw>0, 'final']= sum_pos
KeyError: "[('r', 'a', 'w') ('r', 'a', 'w') ('r', 'a', 'w') ('r', 'a', 'w')\n ('r', 'a', 'w') ('r', 'a', 'w')] not in index"
Лучшее решение, которое я нашел до сих пор, это:
pd.DataFrame(np.where(raw>0, sum_pos, sum_neg), index= raw.index, columns=['final'])
final
0 9.0
1 9.0
2 9.0
3 18.0
4 18.0
5 18.0
Однако я не понимаю, что не так с другими подходами. Я что-то упускаю здесь?