#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
по той или иной причине.)