web-dev-qa-db-ja.com

Python Dataframe:月に基づいて代替日を取得しますか?

salary_dayのdfがあります

            salary_day
    0       thursday
    1       friday

毎日別の日付を表示しようとしています。

May 2020の場合:

5月の木曜日:7,14,21,28、5月の金曜日:1,8,15,22,29

Mayの月の代替木曜日と金曜日の予想される出力:

df

salary_day        req_dates
thursday           7,21 
friday           1,15,29

June 2020の場合:

6月の木曜日:4,11,18,25 6月金曜日:5,12,19,26

5月には5金曜日があるため、6月の最初の金曜日は代替日ではなく、除外する必要があり、12,26を考慮する必要があります。

Juneの月の代替木曜日と金曜日の予想出力:

df

salary_day        req_dates
thursday           4,18
friday             12,26



Edit1:すべての平日

5月の

      salary_day        req_dates
0     Monday            4,18
1     Tuesday           5,19
2     Wednesday         6,20
3     Thursday          7,21
4     Friday           1,15,29 
5     Saturday         2,16,30 
6     Sunday           3,17,31

これは私のために働きました:

# for read_clipboard()
'''
salary_day
thursday
friday
'''

import pandas as pd
df = pd.read_clipboard()
print(df)

  salary_day
0   thursday
1     friday

import calendar

c = calendar.Calendar(firstweekday=calendar.SUNDAY)

year = 2020; month = 5

monthcal = c.monthdatescalendar(year,month)
fridays = [(str(day)[-2:]) for week in monthcal for day in week if \
                day.weekday() == calendar.FRIDAY and \
                day.month == month]
thursdays = [(str(day)[-2:]) for week in monthcal for day in week if \
                day.weekday() == calendar.THURSDAY and \
                day.month == month]

# Friday will be the first salary day of the month only if it occours on 1st
if int(thursdays[0]) < int(fridays[0]):
   fridays = fridays[1:] 


df['req_dates'] = ''

print(df)

df.loc[df['salary_day'] == 'thursday', 'req_dates'] = ','.join(thursdays[::2])
df.loc[df['salary_day'] == 'friday', 'req_dates'] = ','.join(fridays[::2])

出力:

  salary_day req_dates
0   thursday     07,21
1     friday  01,15,29

6月の場合:

year = 2020; month = 6

出力:

  salary_day req_dates
0   thursday     04,18
1     friday     12,26
0
Anshul