我正在使用一个带有日期列的数据框,我必须找到每个月的最后一个工作日期,我使用的代码可以正常工作,但它的工作原理没有意义
数据框“苹果”最初有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
答案 0 :(得分:1)
不,我的疑问是,为什么“日期”列被上一个工作日替换了,我确实想要最后一个工作日,但我不明白如何将“日期”列替换为上一个工作日?
没有替代项,但是每月和每年Date
的上一个值取决于删除重复项后Date
列中的数据。
因此,这里的最后一个值与Last_Day
相同,唯一的例外是2014年7月-月份为2014-07-08
。
为了更好地理解更改的数据和排序-然后获得每月的第一个值或最后一个vlue操作员月份:
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