मैं प्रत्येक शुक्रवार को दो तिथियों के बीच सूचीबद्ध करने के लिए साप्ताहिक कार्यक्रम/कैलेंडर बनाना चाहता हूं। यदि शुक्रवार को छुट्टी होती है, तो दिखाई गई तिथि को पिछले कार्य दिवस (गुरुवार को, जब तक कि वह भी अवकाश न हो, उस स्थिति में बुधवार...) होना चाहिए।

मैंने कुछ चीजों की कोशिश की है:

import pandas as pd

local_holidays = ['2021-01-08']

my_bank_holidays = pd.tseries.offsets.CustomBusinessDay(
    holidays=local_holidays,
    weekmask='Fri')

reporting_date = pd.date_range('2021-01-01', '2021-01-31', freq=my_bank_holidays)

pd.DataFrame(reporting_date)

परिणाम (नीचे) - यह शुक्रवार 8 तारीख को छोड़ देता है (इस उदाहरण में मैं गुरुवार 7 तारीख को देखना चाहता हूं):

  • 2021-01-01
  • 2021-01-15
  • 2021-01-22
  • 2021-01-29

इस अगले प्रयास में छुट्टियां शामिल नहीं हैं:

s = pd.date_range('2021-01-01', '2021-01-31', freq='W-FRI')

pd.DataFrame(s, columns=['Date'])

मैंने मासिक आवृत्ति की कोशिश की है, और यह महीने के अंत के लिए ठीक काम करता है - मैं इसे सप्ताह के अंत में परिवर्तित नहीं कर सकता:

local_holidays = ['2020-01-31']

my_bank_holidays = pd.tseries.offsets.CustomBusinessMonthEnd(holidays=local_holidays)

reporting_date = pd.date_range('2021-01-01', '2021-03-31', freq=my_bank_holidays)

pd.DataFrame(reporting_date)

किसी भी सुझाव की सराहना की जाएगी :-)

0
RedBeard 4 फरवरी 2021, 16:08
त्वरित विचार, सुनिश्चित नहीं है कि यह काम करता है, इसलिए टिप्पणी के रूप में पोस्ट करना: सभी शुक्रवारों का एक फ्रेम बनाएं। फिर उन सभी पंक्तियों का चयन करें जहां शुक्रवार को छुट्टी है। प्रत्येक के लिए पिछले शुक्रवार तक सभी दिनों की एक सूची तैयार करें और सभी छुट्टियों को फ़िल्टर करें। यह मानते हुए कि वे तारीखों के अनुसार क्रमबद्ध हैं, बस हर छुट्टी शुक्रवार को सूची में अंतिम तत्व या कोई नहीं के साथ बदलें। अंत में, पूरे सप्ताह की सभी छुट्टियों से छुटकारा पाने के लिए ड्रॉपना। अफैक, पांडा के पास इसके लिए एक आसान प्रतिस्थापन कार्य होना चाहिए।
 – 
paulgavrikov
4 फरवरी 2021, 16:48
- यह कोई बुरा विचार नहीं है, और मैं इसे बैकअप के रूप में उपयोग करूंगा। मैं उम्मीद कर रहा था कि मैंने पांडा की कुछ साफ-सुथरी विशेषता को याद किया है!
 – 
RedBeard
4 फरवरी 2021, 17:27

1 उत्तर

सबसे बढ़िया उत्तर
import numpy as np

holidays = np.datetime64('2021-01-08')
date_range = np.arange('2021-01-01', '2021-01-31', step=7, dtype='datetime64[D]')

reporting_date = pd.DataFrame(np.busday_offset(dates=date_range, offsets=0, holidays=[holidays], roll='backward'))
print(reporting_date)

आउटपुट:

['2021-01-01' '2021-01-07' '2021-01-15' '2021-01-22' '2021-01-29']
1
David M. 4 फरवरी 2021, 19:31
धन्यवाद - यह काम करता है, लेकिन मैं जो कुछ भी कर रहा हूं वह नहीं - हालांकि मैं इसके साथ वहां पहुंच सकता हूं। मैं अपने प्रश्न को थोड़ा स्पष्ट कर दूँगा
 – 
RedBeard
4 फरवरी 2021, 19:16
उपरोक्त कोड किसी भी दिनांक सीमा को इनपुट के रूप में स्वीकार करता है (उदा. Q1 = np.arange('2021-01-01', '2021-03-31', step=7, dtype='datetime64[D]')) - आप अपनी तिमाही का प्रतिनिधित्व कैसे करेंगे?
 – 
David M.
4 फरवरी 2021, 19:28
उदाहरण के लिए, दो तारीखों के बीच 1 जनवरी 2021 -> 31 दिसंबर 2022, तिमाहियों का अंतिम कार्य दिवस जनवरी, अप्रैल, जुलाई, अक्टूबर - मुझे पता है कि पांडा तिमाही के अंतिम कार्य दिवस का पता लगा सकते हैं, लेकिन फिर से, छुट्टियों के साथ एक ही समस्या .
 – 
RedBeard
4 फरवरी 2021, 19:32
तो आप एक वर्ष में प्रत्येक तिमाही के अंतिम दिन की तलाश कर रहे हैं, यदि यह छुट्टी है (यानी 31/01/2021, 30/06/2021, 30/09/20201 और 31/12/2021) स्थानांतरित हो गया है?
 – 
David M.
4 फरवरी 2021, 19:35
तिमाही का अंतिम कार्य दिवस, यह सही है
 – 
RedBeard
4 फरवरी 2021, 19:36