Python 为什么列';日期';被最后一个工作日取代?

Python 为什么列';日期';被最后一个工作日取代?,python,pandas,dataframe,datetime,python-3.6,Python,Pandas,Dataframe,Datetime,Python 3.6,我正在使用一个数据框,它有一个日期列,我必须找到每个月的最后一个工作日期,我使用的代码可以工作,但它的工作方式没有意义 数据框“apple”最初有6列,但我主要关注的是“Date”列,它的日期从每个月的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 2

我正在使用一个数据框,它有一个日期列,我必须找到每个月的最后一个工作日期,我使用的代码可以工作,但它的工作方式没有意义

数据框“apple”最初有6列,但我主要关注的是“Date”列,它的日期从每个月的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
我预计新创建的“Last_Day”列将包含我得到的每个月的最后一天,但令人惊讶的是,“Date”列包含我不理解的每个月的最后一个工作日,因为我没有将任何内容初始化为“Date”,所以“Date”中的所有值是如何被最后一个工作日替换的, 输出:

不,我的疑问是为什么日期栏会被最后一个工作日替换,我确实想要最后一个工作日,但我不明白日期栏是如何被最后一个工作日替换的

没有替换项,但每月和每年的
Date
的最后值取决于删除重复项后
Date
列中的数据

因此,这里的最后一个值与
最后一天
相同,但2014年7月除外-有一个月的最后一天
2014-07-08

为了更好地理解已更改的数据并进行排序-然后每月获取第一个值或最后一个vlue oper月:

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


您是否可以添加一些具有预期输出的示例数据,?jezrael添加。第0行未被替换。您是否一直在使用groupby?你能提供完整的代码吗?@Arkady.A我没有使用groupby。最初,日期列是“object”类型,我将其更改为datetime,否则对原始数据不做任何其他操作。我想要在后续步骤中执行的最后一个工作日,但我的疑问是,当我没有初始化日期时,我如何获得日期列中的最后一个工作日,“日期”中的原始值是如何被上次加工替换的day@PrejithAlex-不明白,是否需要在月的最后一天之前替换
日期
列?@pyd-替换的是
最后一天
-它是最后一列,而不是
日期
-首先column@pyd检查接受的和最后的答案:)@pyd-hmmm,我必须测试它,这里看起来是一样的(但可能有一些不同,不确定)
    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
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