नीचे दिए गए pandas
डेटाफ़्रेम उदाहरण में, MyDate
में महीने का पहला दिन और आखिरी कारोबारी दिन< शामिल हैं /strong> महीने का। डेटासेट हमेशा (current month - 1)
के पहले नंबर पर चलेगा।
मैं गतिशील रूप से MyDate को एक महीने तक बढ़ाना चाहता हूं। हालांकि ऐसा करने में, अंतिम कार्य दिवस अब सही नहीं है। जैसे, मैं अद्यतन महीने के आधार पर अंतिम व्यावसायिक दिन की गणना भी करना चाहूंगा।
इनपुट:
MyDate MyValue
31/Mar/2020 0
01/Apr/2020 a
30/Apr/2020 b
01/May/2020 c
29/May/2020 d <<< note 29 May - last workday of month
01/Jun/2020 e
30/Jun/2020 f
01/Jul/2020 g
31/Jul/2020 h
01/Aug/2020 i
वांछित आउटपुट:
MyDate MyValue
30/Apr/2020 0
01/May/2020 a
29/May/2020 b <<< note 29 May - last workday of month
01/Jun/2020 c
30/Jun/2020 d
01/Jul/2020 e
31/Jul/2020 f
01/Aug/2020 g
31/Aug/2020 h
01/Sep/2020 i
मैंने समस्या को दो भागों में विभाजित किया है:
month
कोmonth+1
में बदलें -relativedelta
का उपयोग करकेpd.offsets.BMonthEnd()
का उपयोग करके - बदले हुए महीने के लिए अंतिम कार्यदिवस प्राप्त करें
, लेकिन किसी तरह मैं # 2 पर फंस गया हूं, हालांकि मैंने स्टैक ओवरफ्लो पर पोस्ट किए गए समान समाधानों का प्रयास किया है।
यह मेरा कोड है:
import pandas as pd
from dateutil.relativedelta import relativedelta
...
# this solves part #1
df['MyDate']=df['MyDate'].dt.date + relativedelta(months=+1)
# attempt at solving part 2
df['MyDate']=pd.to_datetime(df['MyDate'])
mask = df['MyDate'].dt.day > 1
df.loc[mask, 'MyDate'] = df['MyDate'] + pd.offsets.BMonthEnd(1)
आखिरी पंक्ति वह है जहां मैं फंस गया हूं; जाहिर है यह उन परिणामों को उत्पन्न नहीं करता है जो मैंने सोचा था कि यह होगा ...
इसे हल करने में कोई मदद, या पूरी तरह से समस्या को हल करने के लिए एक अलग "पांडा-एस्क्यू" दृष्टिकोण की सराहना की जाएगी।
1 उत्तर
आप अपने MyDate
कॉलम में बिजनेस-माह-समाप्ति तिथियों की पहचान करने के लिए एक बूलियन मास्क बना सकते हैं (व्यावसायिक-माह-समाप्ति तिथियां रिटर्न True
, अन्य रिटर्न False
)। 1 महीने की शुरुआत और 1 बिजनेस-महीने के अंत को अलग-अलग जोड़ने के लिए इस मास्क का उपयोग करें
m = df.MyDate == (df.MyDate + pd.offsets.BMonthEnd(0))
df.loc[m, 'MyDate'] = df.loc[m, 'MyDate'] + pd.offsets.BMonthEnd(1)
df.loc[~m, 'MyDate'] = df.loc[~m, 'MyDate'] + pd.offsets.MonthBegin(1)
print(df)
Output:
MyDate MyValue
0 2020-04-30 0
1 2020-05-01 a
2 2020-05-29 b
3 2020-06-01 c
4 2020-06-30 d
5 2020-07-01 e
6 2020-07-31 f
7 2020-08-01 g
8 2020-08-31 h
9 2020-09-01 i
नोट: मुझे लगता है कि आपका MyDate
कॉलम पहले से ही dtype: datetime64[ns]
में है
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।