#python #pandas #numpy
#python #панды #numpy
Вопрос:
Я пытаюсь вместо использования np.sum
пытаться использовать np.subtract
в параметре pivot aggfunc
. Использование np.sum
работает.
Однако, когда я использую np.subtract
, я получаю сообщение об ошибке с указанием:
в ufunc() отсутствует 1 из 2 требуемых позиционных аргументов
table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.subtract)
Допустим, гипотетически я получил следующий образец данных:
A B C D
Bar one small 1
Bar one large -2
Bar one large 2
Bar two small -3
Bar two small -3
TER one large 4
TER one small -5
Над столбцом один большой, использующий np.sum, приведет к нулю.
Мне нужно вычесть, чтобы это было нетто : -4: -2 - 2 = -4
Есть ли способ вычитать вместо sum?
Комментарии:
1. Можете ли вы добавить образец данных?
2. добавлен пример фрейма данных =)
Ответ №1:
Вы можете использовать этот трюк — умножить все дублирующиеся строки на -1
, а затем использовать sum
:
df['D'] *= np.where(df.duplicated(['A','B','C']), -1, 1)
print (df)
A B C D
0 Bar one small 1
1 Bar one large -2
2 Bar one large -2
3 Bar two small -3
4 Bar two small 3
5 TER one large 4
6 TER one small -5
table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc='sum')
print (table)
C large small
A B
Bar one -4.0 1.0
two NaN 0.0
TER one 4.0 -5.0
Комментарии:
1. однако это приведет к неправильному изменению моих данных. ОДИН БОЛЬШОЙ не даст -4, а ОДИН МАЛЕНЬКИЙ не останется -5
2. @pybianco — Вы правы, добавлен столбец
C
вduplicated.
3. @pybianco — Если вы хотите что-то еще, пожалуйста, добавьте ожидаемый результат из образца данных.