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里面取最大数就好了,也就是出现最多的元素的次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值