鱼C论坛

 找回密码
 立即注册
查看: 2656|回复: 2

[技术交流] 求连胜的问题,前边有人求助,找不到那个帖子了

[复制链接]
发表于 2021-5-27 21:01:06 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 rsj0315 于 2021-5-27 21:02 编辑

求各个id的连胜场次最大值

一列是用户id 一列是战斗情况 战斗情况为胜 负,平,局;
胜就是1 ,用python看每个用户的最大连胜数

方法一
import pandas as pd

def List_deal(list_waitdeal):
    max_time = 0  # 已知最大连续出现次数初始为0
    cur_time = 1  # 记录当前元素是第几次连续出现
    pre_element = None  # 记录上一个元素是什么
    for i in list_waitdeal:
        if i == pre_element:  # 如果当前元素和上一个元素相同,连续出现次数+1,并更新最大值
            cur_time += 1
            max_time = max((cur_time, max_time))
        else:  # 不同则刷新计数器
            pre_element = i
            cur_time = 1
    return max_time
if __name__ == '__main__':
    import time
    start = time.time()
    df=pd.read_excel(r'连胜情况.xlsx')
    ID_list=list(set(df['ID']))
    Result = {}
    for i in range(len(ID_list)):
        df_pre=df[df['ID']==ID_list[i]]
        # print(list(df_pre['胜负']))
        Max_time=List_deal(list(df_pre['胜负']))
        Result[ID_list[i]]=Max_time
    Result_df = pd.DataFrame.from_dict(Result,orient='index',columns=['连胜最多场次'])
    Result_df.to_excel(r'final_deal.xlsx')
    end = time.time()
    print(end - start)


方法二
import pandas as pd

def List_deal(list_waitdeal):
    max_time = 0  # 已知最大连续出现次数初始为0
    cur_time = 1  # 记录当前元素是第几次连续出现
    pre_element = None  # 记录上一个元素是什么
    for i in list_waitdeal:
        if i == pre_element:  # 如果当前元素和上一个元素相同,连续出现次数+1,并更新最大值
            cur_time += 1
            max_time = max((cur_time, max_time))
        else:  # 不同则刷新计数器
            pre_element = i
            cur_time = 1
    return max_time
if __name__ == '__main__':
    import time
    start = time.time()
    df=pd.read_excel(r'连胜情况.xlsx')
    ds1=df.groupby('ID')
    df2 = dict(list(ds1))#这部操作,有点不太懂
    print(df2)
    Result={}
    for i in df2.keys():
        df_pre2 = pd.DataFrame(df2[i], index=None)
        Max_time=List_deal(list(df_pre2['胜负']))
        Result[i]=Max_time
    Result_df = pd.DataFrame.from_dict(Result,orient='index',columns=['连胜最多场次'])
    Result_df.to_excel(r'final_deal.xlsx')
    end = time.time()
    print(end - start)

连胜情况.zip

136.69 KB, 下载次数: 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-27 21:03:35 | 显示全部楼层
方法二的查询各id数据方法,挺好的,效率高一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-28 09:13:42 | 显示全部楼层
又有好朋友提供一个好的办法
import pandas as pd

df = pd.DataFrame({'胜': [0, 1, 1, 0, 1, 1, 1, 1, 0, 1]})
print(df)
df['连胜'] = 0

df.loc[0, '连胜'] = df.loc[0, '胜']
for i in df.index:
    if i == 0:
        continue
    if df.loc[i, '胜'] == 1:
        df.loc[i, '连胜'] = 1 + df.loc[i - 1, '连胜']
    else:
        df.loc[i, '连胜'] = 0
print(df)
print('最大连胜', df['连胜'].max())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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