Сброс значений до даты X для каждого столбца в DataFrame - PullRequest
2 голосов
/ 08 апреля 2019

Скажите, у меня есть следующий DataFrame:

d = pd.DataFrame({'A': [20, 0.5, 40, 45, 40, 35, 20, 25], 
                  'B' : [5, 10, 6, 8, 9, 7, 5, 8]}, 
                   index = pd.date_range(start = "2010Q1", periods = 8, freq = 'QS'))

               A   B
2010-01-01  20.0   5
2010-04-01   0.5  10
2010-07-01  40.0   6
2010-10-01  45.0   8
2011-01-01  40.0   9
2011-04-01  35.0   7
2011-07-01  20.0   5
2011-10-01  25.0   8

Также предположим, что у меня есть следующие серии дат:

D = d.idxmax()

A   2010-10-01
B   2010-04-01
dtype: datetime64[ns]

То, что я пытаюсь сделать, это по сути "сбросить" значения в DataFrame, d, которые встречаются до дат в ряду D для каждого столбца

То есть то, что я ищу:

               A     B
2010-01-01   NaN   NaN
2010-04-01   NaN  10.0
2010-07-01   NaN   6.0
2010-10-01  45.0   8.0
2011-01-01  40.0   9.0
2011-04-01  35.0   7.0
2011-07-01  20.0   5.0
2011-10-01  25.0   8.0

Обратите внимание, что все значения в столбце A до 2010-10-01 удалены, а все значения в столбце B удалены до 2010-04-01.

Для этого достаточно просто перебрать столбцы, но DataFrame, с которым я работаю, очень большой, и этот процесс занимает много времени.

Есть ли более простой способ сделать это оптом, а не столбец за столбцом?

Спасибо

1 Ответ

0 голосов
/ 08 апреля 2019

Не уверен, что это самый элегантный ответ, но поскольку других ответов пока нет, я решил предложить рабочее решение:

import pandas as pd
import numpy as np
import datetime

d = pd.DataFrame({'A': [20, 0.5, 40, 45, 40, 35, 20, 25], 
                  'B' : [5, 10, 6, 8, 9, 7, 5, 8]}, 
                   index = pd.date_range(start = "2010Q1", periods = 8, freq = 'QS'))

D = d.idxmax()


for column in D.index:
    d.loc[d.index < D[column], column] = np.nan

Выход:

            A       B
2010-01-01  NaN     NaN
2010-04-01  NaN     10.0
2010-07-01  NaN     6.0
2010-10-01  45.0    8.0
2011-01-01  40.0    9.0
2011-04-01  35.0    7.0
2011-07-01  20.0    5.0
2011-10-01  25.0    8.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...