如何找到一个月中最常见的日期名称?
How to find the most common day name in a month?
有没有办法将指定月份和年份中出现最频繁的星期几打印为字符串。像 Monday
和 Tuesday
一样,如果有多天,应该显示第一天。
首先我尝试检查 datetime
输出但无法找到日历模块来将其作为日输出。
import calendar
def usingcalendar(datetuple):
l = []
dt=list(datetuple)
obj = calendar.Calendar()
for day in obj.itermonthdates(dt[0], dt[1]):
l.append(day)
rev = l[:-8:-1]
rev.reverse()
print(rev)
我试图使用 calendar.itermonthdays
来获取所需的迭代器,以使用它来显示像 'Monday'、星期二这样的日子。但只到此为止
[datetime.date(2020, 2, 24), datetime.date(2020, 2, 25), datetime.date(2020, 2, 26),
datetime.date(2020, 2, 27), datetime.date(2020, 2, 28), datetime.date(2020, 2, 29),
datetime.date(2020, 3, 1)]
我猜你应该考虑使用 pandas 以防出现多个重复值
import pandas as pd
List = [2, 1, 2, 2, 1, 3, 1]
# Create a panda DataFrame using the list
df=pd.DataFrame({'Number': List})
# Creating a new dataframe to store the values with appropriate column name
# value_counts() returns the count based on the grouped column values
df1 = pd.DataFrame(data=df['Number'].value_counts(), columns=[['Number','Count']])
# The values in the List become the index of the new dataframe.Setting these index as a column
df1['Count']=df1['Number'].index
# Fetch the list of frequently repeated columns
list(df1[df1['Number']==df1.Number.max()]['Count'])
输出
[2,1]
在您的场景中使用此示例!
您可以为此使用 collections.Counter
。您可以为给定的年份和月份调用日历的 itermonthdates
,然后使用 datetime
.
的 '%A'
格式说明符创建工作日名称的 Counter
import calendar
from collections import Counter
cal = calendar.Calendar()
year = 2020
month = 1
count = Counter(d.strftime('%A') for d in cal.itermonthdates(year, month) if d.month==month)
然后举例
>>> count
Counter({'Wednesday': 5, 'Thursday': 5, 'Friday': 5, 'Saturday': 4, 'Sunday': 4, 'Monday': 4, 'Tuesday': 4})
>>> count.most_common(1)
[('Wednesday', 5)]
您只需要从每月 29 日到 31 日的任何有效日期的日期名称。如果其中任何一个不是有效日期,请停止尝试。
import datetime
def get_most_common_days(year, month):
days = []
for daynum in range(29, 32):
try:
days.append(datetime.date(year, month, daynum).strftime('%A'))
except ValueError:
break
return days
print(get_most_common_days(2020, 8))
这给出了
['Saturday', 'Sunday', 'Monday']
2020 年 8 月最常见的日子。出现 5 次。未列出的日期出现4次
新手程序员:
我试图解决完全相同的问题。我想出了这个解决方案并且有效。
import calendar
import collections.defaultdict as dd
days_count = dd(int)
obj = calendar.Calendar()
days = [x for x in obj.itermonthdays2(year,month)]
for day in days:
if day[0] != 0: #these are empty days in a monthly calendar
days_count[day[1]] += 1
max_day = max(days_count, key=days_count.get)
这将给出一个整数值(0=星期一,1=星期二,... 6=星期日)。
您可以使用函数或字典将整数转换为工作日的字符串表示形式。
仅供参考:此解决方案给出了第一个出现的工作日,以防出现多个最常出现的工作日
这是我的回答,似乎有效-
import calendar
from collections import Counter
obj = calendar.Calendar()
my_list1 = []
for i in obj.itermonthdays2(year, month):
if i[0] == 0:
pass
else:
my_list1.append(str(i[1]))
int_values = []
for i in my_list1:
int_values.append(int(i))
num = Counter(int_values)
num = num.most_common(1)[0][0]
if num == 0:
print("Monday")
if num == 1:
print("Tuesday")
if num == 2:
print("Wednesday")
if num == 3:
print("Thursday")
if num == 4:
print("Friday")
if num == 5:
print("Saturday")
if num == 6:
print("Sunday")
最后的部分有点长,但我找不到任何方法来克服它。
我相信这应该有效。
29日哪一天来,一个月来5次,先来。
如果是闰年,所有的日子都会来4次,所以星期一应该是一周的第一天。
import datetime
try:
print(datetime.date(year, month,29).strftime('%A'))
except ValueError:
print("Monday")
#!/bin/python3
import math
import os
import random
import re
import sys
import calendar
import datetime
from collections import Counter
def usingcalendar(datetuple):
# Write your code here
year = datetuple[0]
temp = list(datetuple)
if (year%4==0):
temp[1] = 2
datetuple = tuple(temp)
print(calendar.month(datetuple[0],datetuple[1]))
obj = calendar.Calendar()
l = []
dt=list(datetuple)
obj = calendar.Calendar()
for day in obj.itermonthdates(dt[0], dt[1]):
l.append(day)
rev = l[:-8:-1]
rev.reverse()
print(rev)
try:
print(datetime.date(datetuple[0],datetuple[1],29).strftime('%A'))
except ValueError:
print("Monday")
if __name__ == '__main__':
qw1 = []
for _ in range(3):
qw1_item = int(input().strip())
qw1.append(qw1_item)
tup=tuple(qw1)
usingcalendar(tup)
查找该月第一天的工作日。显然,每个月的第一天所在的工作日出现频率最高。
如果有好几天也没关系,因为它们只会在这之后出现,我们只需要找到第一天。
from datetime import datetime
month, year = 2, 2020
first_date = datetime(month=2, year=2020, day=1)
first_most_frequent_weekday = first_date.strftime("%A")
print(first_most_frequent_weekday) # Saturday
有没有办法将指定月份和年份中出现最频繁的星期几打印为字符串。像 Monday
和 Tuesday
一样,如果有多天,应该显示第一天。
首先我尝试检查 datetime
输出但无法找到日历模块来将其作为日输出。
import calendar
def usingcalendar(datetuple):
l = []
dt=list(datetuple)
obj = calendar.Calendar()
for day in obj.itermonthdates(dt[0], dt[1]):
l.append(day)
rev = l[:-8:-1]
rev.reverse()
print(rev)
我试图使用 calendar.itermonthdays
来获取所需的迭代器,以使用它来显示像 'Monday'、星期二这样的日子。但只到此为止
[datetime.date(2020, 2, 24), datetime.date(2020, 2, 25), datetime.date(2020, 2, 26),
datetime.date(2020, 2, 27), datetime.date(2020, 2, 28), datetime.date(2020, 2, 29),
datetime.date(2020, 3, 1)]
我猜你应该考虑使用 pandas 以防出现多个重复值
import pandas as pd
List = [2, 1, 2, 2, 1, 3, 1]
# Create a panda DataFrame using the list
df=pd.DataFrame({'Number': List})
# Creating a new dataframe to store the values with appropriate column name
# value_counts() returns the count based on the grouped column values
df1 = pd.DataFrame(data=df['Number'].value_counts(), columns=[['Number','Count']])
# The values in the List become the index of the new dataframe.Setting these index as a column
df1['Count']=df1['Number'].index
# Fetch the list of frequently repeated columns
list(df1[df1['Number']==df1.Number.max()]['Count'])
输出
[2,1]
在您的场景中使用此示例!
您可以为此使用 collections.Counter
。您可以为给定的年份和月份调用日历的 itermonthdates
,然后使用 datetime
.
'%A'
格式说明符创建工作日名称的 Counter
import calendar
from collections import Counter
cal = calendar.Calendar()
year = 2020
month = 1
count = Counter(d.strftime('%A') for d in cal.itermonthdates(year, month) if d.month==month)
然后举例
>>> count
Counter({'Wednesday': 5, 'Thursday': 5, 'Friday': 5, 'Saturday': 4, 'Sunday': 4, 'Monday': 4, 'Tuesday': 4})
>>> count.most_common(1)
[('Wednesday', 5)]
您只需要从每月 29 日到 31 日的任何有效日期的日期名称。如果其中任何一个不是有效日期,请停止尝试。
import datetime
def get_most_common_days(year, month):
days = []
for daynum in range(29, 32):
try:
days.append(datetime.date(year, month, daynum).strftime('%A'))
except ValueError:
break
return days
print(get_most_common_days(2020, 8))
这给出了
['Saturday', 'Sunday', 'Monday']
2020 年 8 月最常见的日子。出现 5 次。未列出的日期出现4次
新手程序员:
我试图解决完全相同的问题。我想出了这个解决方案并且有效。
import calendar
import collections.defaultdict as dd
days_count = dd(int)
obj = calendar.Calendar()
days = [x for x in obj.itermonthdays2(year,month)]
for day in days:
if day[0] != 0: #these are empty days in a monthly calendar
days_count[day[1]] += 1
max_day = max(days_count, key=days_count.get)
这将给出一个整数值(0=星期一,1=星期二,... 6=星期日)。 您可以使用函数或字典将整数转换为工作日的字符串表示形式。
仅供参考:此解决方案给出了第一个出现的工作日,以防出现多个最常出现的工作日
这是我的回答,似乎有效-
import calendar
from collections import Counter
obj = calendar.Calendar()
my_list1 = []
for i in obj.itermonthdays2(year, month):
if i[0] == 0:
pass
else:
my_list1.append(str(i[1]))
int_values = []
for i in my_list1:
int_values.append(int(i))
num = Counter(int_values)
num = num.most_common(1)[0][0]
if num == 0:
print("Monday")
if num == 1:
print("Tuesday")
if num == 2:
print("Wednesday")
if num == 3:
print("Thursday")
if num == 4:
print("Friday")
if num == 5:
print("Saturday")
if num == 6:
print("Sunday")
最后的部分有点长,但我找不到任何方法来克服它。
我相信这应该有效。 29日哪一天来,一个月来5次,先来。 如果是闰年,所有的日子都会来4次,所以星期一应该是一周的第一天。
import datetime
try:
print(datetime.date(year, month,29).strftime('%A'))
except ValueError:
print("Monday")
#!/bin/python3
import math
import os
import random
import re
import sys
import calendar
import datetime
from collections import Counter
def usingcalendar(datetuple):
# Write your code here
year = datetuple[0]
temp = list(datetuple)
if (year%4==0):
temp[1] = 2
datetuple = tuple(temp)
print(calendar.month(datetuple[0],datetuple[1]))
obj = calendar.Calendar()
l = []
dt=list(datetuple)
obj = calendar.Calendar()
for day in obj.itermonthdates(dt[0], dt[1]):
l.append(day)
rev = l[:-8:-1]
rev.reverse()
print(rev)
try:
print(datetime.date(datetuple[0],datetuple[1],29).strftime('%A'))
except ValueError:
print("Monday")
if __name__ == '__main__':
qw1 = []
for _ in range(3):
qw1_item = int(input().strip())
qw1.append(qw1_item)
tup=tuple(qw1)
usingcalendar(tup)
查找该月第一天的工作日。显然,每个月的第一天所在的工作日出现频率最高。
如果有好几天也没关系,因为它们只会在这之后出现,我们只需要找到第一天。
from datetime import datetime
month, year = 2, 2020
first_date = datetime(month=2, year=2020, day=1)
first_most_frequent_weekday = first_date.strftime("%A")
print(first_most_frequent_weekday) # Saturday