亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

過濾 pandas 數據框中的行,其中數據屬于從當前季度開始到當月月底的數據

過濾 pandas 數據框中的行,其中數據屬于從當前季度開始到當月月底的數據

繁花不似錦 2023-10-05 16:34:21
我正在嘗試調整我的數據框以查找季度至今 (QTD) 行。在下面的數據中,我的一年從二月開始,所以當我說 QTD 時,我的意思如下:Quarter Months1       Feb, Mar, Apr2       May, Jun, Jul3       Aug, Sep, Oct4       Nov, Dec, JanSample Dataframe:Quarter Month   Data    Value1       1       A       100             1       2       B       134             1       3       C       145             2       4       D       156             2       5       E       167             2       6       F       178             3       7       G       123             3       8       H       112             3       9       I       187             4       10      J       132             4       11      K       109             4       12      L       121             對于當前情況,假設我當前的月份是 9 月,已過濾的數據應僅包含 8 月至 9 月的行。我可以使用以下函數來識別季度,但這是從一月開始的。def current_quarter(dt):    prev_quarter_map = ((4, -1), (1, 0), (2, 0), (3, 0))    quarter, yd = prev_quarter_map[(dt.month - 1) // 3]    return (quarter)    有沒有辦法只過濾那些從當前季度開始到當月結束的行?
查看完整描述

1 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

想法是從 開始按季度創建字典February,然后Series.map按月份使用并按boolean indexing日期時間過濾now從字典轉換為您的季度dq

q = [[2,3,4],[5,6,7],[8,9,10],[11,12,1]]

dq = {x: k for k, v in enumerate(q, 1) for x in v}

print (dq)

{2: 1, 3: 1, 4: 1, 5: 2, 6: 2, 7: 2, 8: 3, 9: 3, 10: 3, 11: 4, 12: 4, 1: 4}


now = dq[pd.to_datetime('now').month]

print (now)

3


df1 = df[df['Month'].map(dq) == now]

print (df1)

? ?Quarter? Month Data? Value

7? ? ? ? 3? ? ? 8? ? H? ? 112

8? ? ? ? 3? ? ? 9? ? I? ? 187

9? ? ? ? 4? ? ?10? ? J? ? 132

如果需要按其他日期時間過濾:


date = datetime.date(2015, 1, 13)

now = dq[date.month]

print (now)

4


df1 = df[df['Month'].map(dq) == now]

print (df1)

? ? Quarter? Month Data? Value

0? ? ? ? ?1? ? ? 1? ? A? ? 100

10? ? ? ? 4? ? ?11? ? K? ? 109

11? ? ? ? 4? ? ?12? ? L? ? 121

編輯:在上面的解決方案中不區分年份和季度,因此為其添加了新的解決方案tseries.offsets.QuarterBegin

#add year column

print (df)

? ? Quarter? Month Data? Value? Year

0? ? ? ? ?1? ? ? 1? ? A? ? 100? 2020

1? ? ? ? ?1? ? ? 2? ? B? ? 134? 2020

2? ? ? ? ?1? ? ? 3? ? C? ? 145? 2020

3? ? ? ? ?2? ? ? 4? ? D? ? 156? 2020

4? ? ? ? ?2? ? ? 5? ? E? ? 167? 2020

5? ? ? ? ?2? ? ? 6? ? F? ? 178? 2020

6? ? ? ? ?3? ? ? 7? ? G? ? 123? 2020

7? ? ? ? ?3? ? ? 8? ? H? ? 112? 2020

8? ? ? ? ?3? ? ? 9? ? I? ? 187? 2020

9? ? ? ? ?4? ? ?10? ? J? ? 132? 2020

10? ? ? ? 4? ? ?11? ? K? ? 109? 2020

11? ? ? ? 4? ? ?12? ? L? ? 121? 2020


#convert columns to datetimes and convert to datetime for start oq quarter


df['Q'] = (pd.to_datetime(df[['Month','Year']].assign(Day=1)) +?

? ? ? ? ? ?pd.offsets.QuarterBegin(0, startingMonth=2))

print (df)

? ? Quarter? Month Data? Value? Year? ? ? ? ? Q

0? ? ? ? ?1? ? ? 1? ? A? ? 100? 2020 2020-02-01

1? ? ? ? ?1? ? ? 2? ? B? ? 134? 2020 2020-02-01

2? ? ? ? ?1? ? ? 3? ? C? ? 145? 2020 2020-05-01

3? ? ? ? ?2? ? ? 4? ? D? ? 156? 2020 2020-05-01

4? ? ? ? ?2? ? ? 5? ? E? ? 167? 2020 2020-05-01

5? ? ? ? ?2? ? ? 6? ? F? ? 178? 2020 2020-08-01

6? ? ? ? ?3? ? ? 7? ? G? ? 123? 2020 2020-08-01

7? ? ? ? ?3? ? ? 8? ? H? ? 112? 2020 2020-08-01

8? ? ? ? ?3? ? ? 9? ? I? ? 187? 2020 2020-11-01

9? ? ? ? ?4? ? ?10? ? J? ? 132? 2020 2020-11-01

10? ? ? ? 4? ? ?11? ? K? ? 109? 2020 2020-11-01

11? ? ? ? 4? ? ?12? ? L? ? 121? 2020 2021-02-01

還被添加QuarterBegin到日期時間和最后的擬合器中:


date = datetime.date(2020, 1, 13)

custom_q = (date + pd.offsets.QuarterBegin(0, startingMonth=2))

print (custom_q)

2020-02-01 00:00:00



df1 = df[df['Q'] == custom_q]

print (df1)

? ?Quarter? Month Data? Value? Year? ? ? ? ? Q

0? ? ? ? 1? ? ? 1? ? A? ? 100? 2020 2020-02-01

1? ? ? ? 1? ? ? 2? ? B? ? 134? 2020 2020-02-01


查看完整回答
反對 回復 2023-10-05
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號