xu007xu 发表于 2021-5-24 12:16:21

rsj0315 发表于 2021-5-24 12:16:22

统计的是用的pandas
不废话,直接上代码
import pandas as pd

path = r'连胜情况.xlsx'
def read_content(path):
    df = pd.read_excel(path,header=None)
    df.columns=['A','B']
    # print(df)
    #1.先把不是胜利的数字换成0,数据存在C列中
    df['A'] = df['A'].astype(str)
    df['C'] = df['B'].apply(lambda x:0 if x!=1 else x)
    #2.获取A列都有哪些id
    id_list = df['A'].unique()
    #3.存放统计的数据字典
    con_win_dic={}
    for id in id_list:
      #1.每次筛选一个id
      df_new = df.loc==id]
      #2.按照相邻数据比较,便于下次分组用,统计连续数字的方法见这个网址https://stackoverflow.com/questions/40802800/how-to-groupby-consecutive-values-in-pandas-dataframe
      grouper = (df_new['C'] != df_new['C'].shift()).cumsum()
      #3.写一个空的列表,用于存储每次连胜数据
      list_num=[]
      for i ,j in df_new.groupby(grouper):
            list_num.append(len(j.C))
      #4.每个最大的连胜数和id存放在字典中
      con_win_dic=max(list_num)
    # print(con_win_dic)
    # result = pd.DataFrame()#横着的格式的
    result = pd.DataFrame.from_dict(con_win_dic,orient='index',columns=['连胜最多场次'])
    print(result)
    result.to_csv(r'连胜情况.txt',sep='\t')

if __name__ == '__main__':
    read_content(path)


用了两次for循环,应该还能优化下,pandas有点生疏了

rsj0315 发表于 2021-5-26 16:23:43

这个题挺好,楼主可以吧标题修改下,改成求各个id的连胜场次最大值

xu007xu 发表于 2021-5-26 22:24:09

rsj0315 发表于 2021-5-27 09:11:45

xu007xu 发表于 2021-5-26 22:24
请问一下,为什么会报错

你查看下,文件路径,安装的pandas包
还有你的python版本。
我这里又试了一下没问题的。

hl470459574 发表于 2021-5-27 13:50:38

新人报到,请多指教
页: [1]
查看完整版本: 用Python读取Excuse文件