鱼C论坛

 找回密码
 立即注册
查看: 1800|回复: 20

[已解决]统计连续出现相同数值的次数应该怎样做呢?

[复制链接]
发表于 2020-6-27 17:13:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
读取csv文件,根据‘MM’列判断,若该列连续出现 3次'4M'则判定为"one year" ,选择 one year出现的开始时间存储到列表 YearList 中,最后,将列表 YearList保存到文本文件“YearDate.txt”中。
最佳答案
2020-6-27 20:08:01
本帖最后由 Twilight6 于 2020-6-27 20:27 编辑
艾依古 发表于 2020-6-27 18:58
可以麻烦用参考案例的代码做一下吗,题目好像要求按照参考代码来做?我不太明白怎么样可以将csv文件的某一 ...



你说是出现 3 次吧,不包含3次以上哈
import pandas as pd
import itertools
dp = pd.read_csv('urls.csv')
mylist = list(dp['MM'])
num_times = [(k, len(list(v))) for k, v in itertools.groupby(mylist)]
print(num_times)
sumIndexList = []
for i in range(len(num_times)):
    if num_times[i][0] == '4M' and num_times[i][1] == 3:
        sumIndex = 0
        while i >= 1:
            sumIndex += num_times[i-1][1]
            i = i - 1
    if sumIndex not in sumIndexList:
        sumIndexList.append(sumIndex)
print("符合要求的元素首次出现的位置列表为:",sumIndexList)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-27 17:18:09 | 显示全部楼层
把样本数据发下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 17:27:35 | 显示全部楼层
Data     MM
001      4M
002      4M   
003      4M
004      2M
005      3M
006     4M
007     4M
008     4M
009     4M
010     4M
011     1M
012     3M
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 17:28:31 | 显示全部楼层
大概是这样,只取了前面一小部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 17:36:44 | 显示全部楼层
艾依古 发表于 2020-6-27 17:27
Data     MM
001      4M
002      4M   

data 是时间?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 17:39:52 | 显示全部楼层
嗯嗯,是滴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 18:12:02 | 显示全部楼层
题目里给的提示案例有这个。
参考案例:计算一个列表中连续相同的元素个数,并返回连续出现 4 次及以上
的 1 所在的开始位置。
import itertools
mylist = [1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,11,0]
num_times = [(k, len(list(v))) for k, v in itertools.groupby(mylist)]
print(num_times)
sumIndexList = []#存储符合要求的元素首次出现的位置
for i in range(len(num_times)):
if num_times[i][0] == 1 and num_times[i][1] >= 4:
sumIndex = 0
while i >= 1:
sumIndex += num_times[i-1][1]
i = i - 1
sumIndexList.append(sumIndex)
print("符合要求的元素首次出现的位置列表为:",sumIndexList)结果:
输出结果:
[(1, 2), (0, 1), (1, 3), (0, 4), (1, 4), (0, 1), (1, 1), (0, 1), (11, 1), (0, 1)]
符合要求的元素首次出现的位置列表为: [10]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 18:29:14 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-27 18:31 编辑
艾依古 发表于 2020-6-27 18:12
题目里给的提示案例有这个。
参考案例:计算一个列表中连续相同的元素个数,并返回连续出现 4 次及以上
...



这样可否?
import pandas as pd


dp = pd.read_csv('你的文件名')
count = 0
mylist = []
for i in dp.iterrows():
    if i[1]['MM'] == '4M':
        count += 1
    else:
        if count >= 3:
            mylist.append(i[1]['Data']-1-count)
        count = 0
print(mylist)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 18:58:36 | 显示全部楼层
可以麻烦用参考案例的代码做一下吗,题目好像要求按照参考代码来做?我不太明白怎么样可以将csv文件的某一列数据转化为list,参考案例的代码我也不太看的懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 20:08:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-27 20:27 编辑
艾依古 发表于 2020-6-27 18:58
可以麻烦用参考案例的代码做一下吗,题目好像要求按照参考代码来做?我不太明白怎么样可以将csv文件的某一 ...



你说是出现 3 次吧,不包含3次以上哈
import pandas as pd
import itertools
dp = pd.read_csv('urls.csv')
mylist = list(dp['MM'])
num_times = [(k, len(list(v))) for k, v in itertools.groupby(mylist)]
print(num_times)
sumIndexList = []
for i in range(len(num_times)):
    if num_times[i][0] == '4M' and num_times[i][1] == 3:
        sumIndex = 0
        while i >= 1:
            sumIndex += num_times[i-1][1]
            i = i - 1
    if sumIndex not in sumIndexList:
        sumIndexList.append(sumIndex)
print("符合要求的元素首次出现的位置列表为:",sumIndexList)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 20:15:37 | 显示全部楼层
包含三次以上,是不是只要把num_times[i][1] == 3:改为num_times[i][1] >= 3: 就可以了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 20:26:06 | 显示全部楼层
艾依古 发表于 2020-6-27 20:15
包含三次以上,是不是只要把num_times[1] == 3:改为num_times[1] >= 3: 就可以了?

是的  你下次回复别人记得点回复。。。我是正好回来看看才看到你的消息 不然都不知道你发了消息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 20:27:51 | 显示全部楼层
艾依古 发表于 2020-6-27 20:15
包含三次以上,是不是只要把num_times[1] == 3:改为num_times[1] >= 3: 就可以了?

代码有些改动 你重新复制查看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 20:28:52 | 显示全部楼层
Twilight6 发表于 2020-6-27 20:26
是的  你下次回复别人记得点回复。。。我是正好回来看看才看到你的消息 不然都不知道你发了消息

好滴,太谢谢你了!这个和我刚刚求助的另一题是不是很相似啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 20:30:39 | 显示全部楼层
艾依古 发表于 2020-6-27 20:28
好滴,太谢谢你了!这个和我刚刚求助的另一题是不是很相似啊?

哪一题 最开始的嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 20:31:01 | 显示全部楼层
Twilight6 发表于 2020-6-27 20:27
代码有些改动 你重新复制查看

好滴,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 20:31:59 | 显示全部楼层
Twilight6 发表于 2020-6-27 20:30
哪一题 最开始的嘛?

是刚刚19点多求助的一道题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 20:40:42 | 显示全部楼层
艾依古 发表于 2020-6-27 20:31
是刚刚19点多求助的一道题

那个大佬帮你写了  你问那个大佬吧,他数据处理比我厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 20:49:24 | 显示全部楼层
Twilight6 发表于 2020-6-27 20:40
那个大佬帮你写了  你问那个大佬吧,他数据处理比我厉害

好滴,谢谢你哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 20:53:06 | 显示全部楼层

你是要等于 5 的? 如果连续 10次要算两次 5 嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 05:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表