Python 为什么列';日期';被最后一个工作日取代?
我正在使用一个数据框,它有一个日期列,我必须找到每个月的最后一个工作日期,我使用的代码可以工作,但它的工作方式没有意义 数据框“apple”最初有6列,但我主要关注的是“Date”列,它的日期从每个月的2014年到1980年不等 样本数据: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
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