Pandas: эквивалент Excel sumifs

#python #pandas

#питон #pandas #python

Вопрос:

Для приведенной ниже таблицы, как мне реализовать эквивалент Python следующего SUMIFS оператора?

 SUMIFS(A3:A7,B3:B7,"<="amp;C1,C3:C7,">0")
  

введите описание изображения здесь

Код для фрейма данных:

 dfp = pd.DataFrame({'Value': [1223, 34, 34, 345],
                    'Date': ['04/03/2020', '06/04/2020','08/06/2020','12/12/2020'],
                    'Tval' : [0.01,0.015,-0.023,-0.0005]})
  

Ожидаемый результат равен 1257.

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

1. Пожалуйста, обновите вопрос, чтобы определить формат даты.

Ответ №1:

Это поможет:

 from datetime import datetime as dt

# Define the reference date as a datetime object.
date = dt(2020, 12, 5)
# Convert dates to a datatime object for compare.
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

# Apply filters and sum.
df.loc[(df['Tval'] > 0) amp; (df['Date'] <= date), 'Value'].sum()
  

Вывод:

 >>> 1257
  

Примечание:
Вышеизложенное предполагает международный формат даты (D / M / Y).

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

1. dfp.loc[(dfp['Tval'] > 0) amp; (dfp['Date'] <= date), 'Value'].sum() нет необходимости выполнять двойную индексацию. 1 хороший ответ!

2. Или, если вам нравится немного больше удобочитаемости, вы можете использовать pd.DataFrame.query . Вот так: dfp.query('Date <= @date and Tval > 0')['Value'].sum()

3. @ScottBoston — Отличная точка зрения, спасибо. Обновлено. (Лично я никогда не справлялся query по той или иной причине.)