Python求多行数据中出现次数最多的元素及次数(按日期)

问题描述:

表格中存在每一天每时段的商品热销记录,目前需要求出每一天最热销的商品是什么?以及它一天中热销的次数。 

表格形式:

时间商品标签
2021-12-11 9:095
2021/12/11 10:096
2021-12-12 12:106

完整版代码:

import pandas as pd
import numpy as np
import datetime as dt
from collections import Counter


df = pd.read_csv(r'C:\Users\hanhan\PycharmProjects\pythonProject\data.csv',encoding = 'gb2312', usecols=['商品标签','时间'])
time = []

for i in range(len(df)):
    starttime = df['时间'].iloc[i]
    #转换成Y-m-d H:M 字符串形式
    try:
        starttime = str(dt.datetime.strptime(starttime, '%Y-%m-%d %H:%M'))[:-3]
    except:
        starttime = str(dt.datetime.strptime(starttime, '%Y/%m/%d %H:%M'))[:-3]
    #将月-日存入time空列表中
    time.append(starttime[6:10])

print('Counter(time)',Counter(time))
day = list(Counter(time).keys())
print('day',day)
amount = list(Counter(time).values())
print('每个商品标签数量',amount)

result1 = []
result2 = []
time1 = np.array(time)
tmp = 0
for j in range(len(day)):
    # print(day[j])
    list = np.argwhere(time1==day[j])
    tmp = tmp + list.shape[0]
    commodity = df['商品标签'].iloc[list[0][0]:tmp].values
    count = np.bincount(commodity)
    common_value = np.argmax(count)
    print('出现最多次数的商品标签',common_value)
    result1.append(common_value)
    commodity_max = max(count)
    print('最多出现商品标签的次数',commodity_max)
    result2.append(commodity_max)

求解步骤:

(1)导入库

import pandas as pd
import numpy as np
import datetime as dt
from collections import Counter

(2)读取数据

df = pd.read_csv(r'C:\Users\hanhan\PycharmProjects\pythonProject\data.csv',encoding = 'gb2312', usecols=['商品标签','时间'])

        另外设置一个空列表time = []存入日期。

(3)循环遍历时间列

        处理两种不同格式的时间,利用try...expect...语句统一成一个格式,如果有个位数的时钟数或者月份数,也统一填充了,方便后面按位数取数。

        将处理好的时间格式存入time列表中,利用Counter()函数遍历一个数组内的所有元素,将元素出现的次数记下来。可以看到打印它出现的格式为:元素+元素出现次数。

         这个元素就是我们每一天的日期,元素出现次数就表示该天一共统计了几次热销商品,也就是一共多少行数据。

(4)每一天的数据分别求解出现次数最多的元素,及其出现次数

result1 = []
result2 = []

        result1是为了存入出现最多次数的元素,result2是为了存入最多出现元素的次数。


for j in range(len(day)):
    # print(day[j])
    list = np.argwhere(time1==day[j])

        找到每天多行数据在表格中的位置。

tmp = tmp + list.shape[0]

commodity = df['商品标签'].iloc[list[0][0]:tmp].values

        list.shape[0]即为每一天数据的长度,也就是多少行。用tmp临时变量存储,例如第一天数据达56行,第二天数据达100行,所以取第二天的时候,list[0][0]为56,tmp为56+100。


    count = np.bincount(commodity)
    common_value = np.argmax(count)
    print('出现最多次数的商品标签',common_value)
    result1.append(common_value)

        np.bincount()函数我理解的就是它会按照从0开始的顺序记录该数字在你的数组中出现的次数。 

        例如:x = np.array([0,1,1,2,3,4,7,7,7,8,9])

                   y = np.bincount(x)

         即,数字0出现1次,数字1出现2次,数字3出现1次...

         所以,通过argmax()函数返回array中数值最大数的下标,找出count里面的最大数的下标,其实就是那个出现最多次数的元素。


    commodity_max = max(count)
    print('最多出现商品标签的次数',commodity_max)
    result2.append(commodity_max)

        从count里面取最大数就好了,也就是出现最多的元素的次数。

### 回答1: 答案是:最多的数字可以通过使用Python的内置函数collections.Counter()来获取。可以使用 Python 内置的函数 max() 来找到一个整数序列出现最多的数。以下是一个示例代码: ```python numbers = [1, 3, 2, 1, 5, 2, 2, 4, 2] most_common_number = max(set(numbers), key=numbers.count) print(most_common_number) ``` 这个代码首先使用 set() 函数去重,然后使用 count() 函数计算每个元素在序列出现次数,最后使用 max() 函数找到出现次数最多元素。在这个例子,输出结果是 2,因为数字 2 出现了 4 次,是这个序列出现最多的数。 ### 回答2: 要寻找整数序列出现次数最多的数,可以用 Python 的 Counter 类。这个类可以帮助统计序列每个元素出现次数。具体步骤如下: 1. 导入 Counter 类。 ``` from collections import Counter ``` 2. 输入整数序列。 ``` nums = [1, 2, 3, 1, 2, 1, 4, 5, 5, 6] ``` 3. 使用 Counter 类统计数字出现次数。 ``` count = Counter(nums) ``` 4. 找出出现次数最多的数字。 ``` most_common = count.most_common(1) ``` `most_common()` 方法可以返回序列出现次数最多元素及其出现次数。在这里,我们设定参数为 1,即返回出现次数最多的单个元素。如果需要返回多个元素,可以将参数设定为需要的数量。 5. 输出结果。 ``` print(most_common[0][0]) ``` 以上步骤就是使用 Python 寻找整数序列出现次数最多的数的方法。你只需要将输入的整数序列替换为你想要处理的序列即可。 ### 回答3: 问题描述: 给定一个整数序列,编写一个Python函数,出这个整数序列出现次数最多的数。 思路分析: 为了实现对整数序列出现次数最多的数的解,可以通过以下步骤来完成: 1. 定义一个空的字典,用来保存每个数字在序列出现次数。 2. 遍历整数序列,对于序列的每个数字,都在字典对应的位置上进行加1操作。 3. 通过遍历字典,找出其出现次数最多的数字,并记录下来。 4. 返回出现次数最多的数字。 Python代码: def count_most_occurence(nums): counts = {} for num in nums: if num in counts: counts[num] += 1 else: counts[num] = 1 max_count = 0 max_num = None for num, count in counts.items(): if count > max_count: max_count = count max_num = num return max_num 测试: nums = [1, 3, 5, 5, 5, 7, 9, 9] print(count_most_occurence(nums)) # 输出:5 nums = [1, 2, 3, 4, 5, 6] print(count_most_occurence(nums)) # 输出:1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值