微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何找到一个月中最常见的日期名称?

如何解决如何找到一个月中最常见的日期名称?

是否可以将指定月份和年份中出现频率最高的星期几打印为字符串。像MondayTuesday一样,如果有多天,则应该显示第一天。

首先,我尝试检查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获取所需的迭代器,以使用该迭代器来显示“星期一”,“星期二”之类的日期。但是只有这样

[datetime.date(2020,2,24),datetime.date(2020,25),26),27),28),29),3,1)]

解决方法

您可以为此使用collections.Counter。您可以调用给定年份和月份的日历itermonthdates,然后使用Counter的{​​{1}}格式说明符创建工作日名称的'%A'

datetime

那么例如

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)
,

Noob编码器:

我试图解决完全相同的问题。我想出了这个解决方案,它可以工作。

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 =星期日)。 您可以使用函数或字典将整数转换为工作日的字符串表示形式。

仅供参考:如果出现的工作日多于一个,则此解决方案可以提供第一个工作日

,

我相信这应该有效。 无论哪一天出现在 29 日,一个月内都会出现 5 次,并且是第一个。 在闰年的情况下,所有的日子都会出现 4 次,所以星期一应该是一周的第一天。

import datetime

try:
    print(datetime.date(year, month,29).strftime('%A'))
except ValueError:
    print("Monday")
,

您只需输入该月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 
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")

结尾部分有点长,但我找不到任何方法可以克服它。

,

我想您应该考虑使用熊猫来重复出现多个值

import pandas as pd 
List = [2,1,2,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]

在您的方案中使用此示例!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。