Почему столбец «Дата» заменяется на последний рабочий день? - PullRequest
0 голосов
/ 26 июня 2019

Я работаю с фреймом данных, в котором есть столбец даты, и мне нужно находить последнюю рабочую дату каждого месяца, код, который я использовал, работает, но не имеет смысла, как он работал

Во фрейме данных «яблоко» изначально было 6 столбцов, но меня больше всего интересует столбец «Дата», даты которого варьируются от 2014-1980 годов каждого месяца. Пример данных:

    Date    Open    High    Low Close   Volume  Adj Close
0   2014-07-08  96.27   96.80   93.92   95.35   65130000    95.35
1   2014-07-07  94.14   95.99   94.10   95.97   56305400    95.97
2   2014-07-03  93.67   94.10   93.20   94.03   22891800    94.03
3   2014-07-02  93.87   94.06   93.09   93.48   28420900    93.48
4   2014-07-01  93.52   94.07   93.13   93.52   38170200    93.52
from pandas.tseries.offsets import MonthEnd
apple['Last_Day']=pd.to_datetime(apple['Date'],format="%Y-%m")+MonthEnd(0)
banana=apple.loc[-apple.Last_Day.duplicated()]

Я ожидал, что у недавно созданного столбца «Last_Day» будет последний день каждого месяца, который я получил, но удивительно, что столбец «Date» получил последний рабочий день каждого месяца, который я не понял, потому что я ничего не инициализировал на «Дата», так как все значения в «Дата» заменяются на последний рабочий день, Выход:

    Date        Open    High    Low     Close   Volume    Adj Close  Last_Day
0   2014-07-08  96.27   96.80   93.92   95.35   65130000    95.35   2014-07-31
5   2014-06-30  92.10   93.73   92.09   92.93   49482300    92.93   2014-06-30
26  2014-05-30  637.98  644.17  628.90  633.00  141005200   90.43   2014-05-31
47  2014-04-30  592.64  599.43  589.80  590.09  114160200   83.83   2014-04-30
68  2014-03-31  539.23  540.81  535.93  536.74  42167300    76.25   2014-03-31
89  2014-02-28  529.08  532.75  522.12  526.24  92992200    74.76   2014-02-28
108 2014-01-31  495.18  501.53  493.55  500.60  116199300   70.69   2014-01-31

1 Ответ

1 голос
/ 26 июня 2019

Нет, я сомневаюсь, почему столбец Дата заменяется на последнюю рабочую дату, я хочу, чтобы последний рабочий день был, но я не понял, как столбец Дата был заменен на последний рабочий день

Замена не производится, но последнее значение Date в месяц и год зависит от данных в столбце Date после удаленных дубликатов.

Итак, последнее значение совпадает с Last_Day, за исключением июля 2014 г. - последний день месяца 2014-07-08.

Для лучшего понимания изменившихся данных и отсортированных, затем получите первое значение за месяц или последний последующий месяц:

print (apple)
         Date   Open   High    Low  Close    Volume  Adj Close
0  2014-07-08  96.27  96.80  93.92  95.35  65130000      95.35
1  2014-06-07  94.14  95.99  94.10  95.97  56305400      95.97
2  2014-06-03  93.67  94.10  93.20  94.03  22891800      94.03
3  2014-05-31  93.87  94.06  93.09  93.48  28420900      93.48
4  2014-07-31  93.52  94.07  93.13  93.52  38170200      93.52

from pandas.tseries.offsets import MonthEnd

apple['Date']=pd.to_datetime(apple['Date'])
apple = apple.sort_values('Date')
print (apple)
        Date   Open   High    Low  Close    Volume  Adj Close
3 2014-05-31  93.87  94.06  93.09  93.48  28420900      93.48
2 2014-06-03  93.67  94.10  93.20  94.03  22891800      94.03
1 2014-06-07  94.14  95.99  94.10  95.97  56305400      95.97
0 2014-07-08  96.27  96.80  93.92  95.35  65130000      95.35
4 2014-07-31  93.52  94.07  93.13  93.52  38170200      93.52

apple['Last_Day']=apple['Date']+MonthEnd(0)
banana=apple.loc[-apple.Last_Day.duplicated()]
print (banana)
        Date   Open   High    Low  Close    Volume  Adj Close   Last_Day
3 2014-05-31  93.87  94.06  93.09  93.48  28420900      93.48 2014-05-31
2 2014-06-03  93.67  94.10  93.20  94.03  22891800      94.03 2014-06-30
0 2014-07-08  96.27  96.80  93.92  95.35  65130000      95.35 2014-07-31

from pandas.tseries.offsets import MonthEnd


apple['Date']=pd.to_datetime(apple['Date'])
apple1 = apple.sort_values('Date', ascending=False)
print (apple1)
        Date   Open   High    Low  Close    Volume  Adj Close
4 2014-07-31  93.52  94.07  93.13  93.52  38170200      93.52
0 2014-07-08  96.27  96.80  93.92  95.35  65130000      95.35
1 2014-06-07  94.14  95.99  94.10  95.97  56305400      95.97
2 2014-06-03  93.67  94.10  93.20  94.03  22891800      94.03
3 2014-05-31  93.87  94.06  93.09  93.48  28420900      93.48

apple1['Last_Day']=apple1['Date']+MonthEnd(0)
banana1=apple1.loc[-apple1.Last_Day.duplicated()]
print (banana1)
        Date   Open   High    Low  Close    Volume  Adj Close   Last_Day
4 2014-07-31  93.52  94.07  93.13  93.52  38170200      93.52 2014-07-31
1 2014-06-07  94.14  95.99  94.10  95.97  56305400      95.97 2014-06-30
3 2014-05-31  93.87  94.06  93.09  93.48  28420900      93.48 2014-05-31
...