Добавление и вычитание строк в фрейме данных Pandas с использованием понимания if / else?

#python #pandas

#python #pandas

Вопрос:

У меня есть такой фрейм данных:

 >>> import pandas as pd
>>> df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [1, 0, 1]], index=['1', '2', '3'], columns=['A', 'B', 'C'])
>>> df
   A  B  C
1  0  2  3
2  0  4  1
3  1  0  1
 

Я пытаюсь добавить еще одну строку в этот фрейм данных, где новая строка вычисляется путем суммирования первых двух строк и вычитания из 3-й строки, а затем проверки, является ли вычисленное значение положительным или нет, используя понимание if / else. Ниже приведен пример кода:

 df.loc['4'] = [0 if (df.iloc[0:2].sum()-df.iloc[[2]])<0 else df.iloc[0:2].sum()-df.iloc[[2]]]
 

Однако это возвращает следующую ошибку.

 ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
 

Я хочу получить что-то вроде этого

   A  B  C
1  0  2  3
2  0  4  1
3  1  0  1
4  0  6  3
 

Комментарии:

1. ваш ожидаемый результат — строка 4 со значениями [0, 6, 3] ?

2. @JoeFerndz это правильно.

3. примечание df['4'] создаст новый столбец, а не новую строку

Ответ №1:

Попробуйте с clip :

 s = df.iloc[:2].sum().sub(df.iloc[2]).clip(0)

df = df.append(s, ignore_index=True)
 

Выходной сигнал:

    A  B  C
0  0  2  3
1  0  4  1
2  1  0  1
3  0  6  3
 

Комментарии:

1. Спасибо, Куанг. Как я могу сохранить исходные имена индексов?

2. df.loc[4] = s ?