鱼C论坛

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

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

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

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

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

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

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

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

方法一
  1. import pandas as pd

  2. def List_deal(list_waitdeal):
  3.     max_time = 0  # 已知最大连续出现次数初始为0
  4.     cur_time = 1  # 记录当前元素是第几次连续出现
  5.     pre_element = None  # 记录上一个元素是什么
  6.     for i in list_waitdeal:
  7.         if i == pre_element:  # 如果当前元素和上一个元素相同,连续出现次数+1,并更新最大值
  8.             cur_time += 1
  9.             max_time = max((cur_time, max_time))
  10.         else:  # 不同则刷新计数器
  11.             pre_element = i
  12.             cur_time = 1
  13.     return max_time
  14. if __name__ == '__main__':
  15.     import time
  16.     start = time.time()
  17.     df=pd.read_excel(r'连胜情况.xlsx')
  18.     ID_list=list(set(df['ID']))
  19.     Result = {}
  20.     for i in range(len(ID_list)):
  21.         df_pre=df[df['ID']==ID_list[i]]
  22.         # print(list(df_pre['胜负']))
  23.         Max_time=List_deal(list(df_pre['胜负']))
  24.         Result[ID_list[i]]=Max_time
  25.     Result_df = pd.DataFrame.from_dict(Result,orient='index',columns=['连胜最多场次'])
  26.     Result_df.to_excel(r'final_deal.xlsx')
  27.     end = time.time()
  28.     print(end - start)
复制代码



方法二
  1. import pandas as pd

  2. def List_deal(list_waitdeal):
  3.     max_time = 0  # 已知最大连续出现次数初始为0
  4.     cur_time = 1  # 记录当前元素是第几次连续出现
  5.     pre_element = None  # 记录上一个元素是什么
  6.     for i in list_waitdeal:
  7.         if i == pre_element:  # 如果当前元素和上一个元素相同,连续出现次数+1,并更新最大值
  8.             cur_time += 1
  9.             max_time = max((cur_time, max_time))
  10.         else:  # 不同则刷新计数器
  11.             pre_element = i
  12.             cur_time = 1
  13.     return max_time
  14. if __name__ == '__main__':
  15.     import time
  16.     start = time.time()
  17.     df=pd.read_excel(r'连胜情况.xlsx')
  18.     ds1=df.groupby('ID')
  19.     df2 = dict(list(ds1))#这部操作,有点不太懂
  20.     print(df2)
  21.     Result={}
  22.     for i in df2.keys():
  23.         df_pre2 = pd.DataFrame(df2[i], index=None)
  24.         Max_time=List_deal(list(df_pre2['胜负']))
  25.         Result[i]=Max_time
  26.     Result_df = pd.DataFrame.from_dict(Result,orient='index',columns=['连胜最多场次'])
  27.     Result_df.to_excel(r'final_deal.xlsx')
  28.     end = time.time()
  29.     print(end - start)
复制代码


连胜情况.zip

136.69 KB, 下载次数: 0

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-27 21:03:35 | 显示全部楼层
方法二的查询各id数据方法,挺好的,效率高一些
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  5. df.loc[0, '连胜'] = df.loc[0, '胜']
  6. for i in df.index:
  7.     if i == 0:
  8.         continue
  9.     if df.loc[i, '胜'] == 1:
  10.         df.loc[i, '连胜'] = 1 + df.loc[i - 1, '连胜']
  11.     else:
  12.         df.loc[i, '连胜'] = 0
  13. print(df)
  14. print('最大连胜', df['连胜'].max())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 09:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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