#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
?