Python 3.x 基于某些条件填充熊猫栏的逻辑

Python 3.x 基于某些条件填充熊猫栏的逻辑,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我正在寻求帮助,以找到一个关于如何通过应用一些条件将新列添加到df的良好逻辑 将根据某些条件创建列“O”(min_Play): 如果一名球员没有被替换,他的比赛时间将是“G”列(时间)中的值 如果它被替换,他的游戏时间将是“N”(subs)列中的值 剩余的时间将添加到与他被替换的球员的同一列“O”(min_Play) 例如: “J”(姓名)栏中的球员“安东尼奥M.”未被替换,“N”(替补)栏=>min_played=time(94.54=94.54) “J”(姓名)栏中的玩家“Bowen J.

我正在寻求帮助,以找到一个关于如何通过应用一些条件将新列添加到df的良好逻辑

将根据某些条件创建列“O”(min_Play):

  • 如果一名球员没有被替换,他的比赛时间将是“G”列(时间)中的值
  • 如果它被替换,他的游戏时间将是“N”(subs)列中的值 剩余的时间将添加到与他被替换的球员的同一列“O”(min_Play)
  • 例如:

  • “J”(姓名)栏中的球员“安东尼奥M.”未被替换,“N”(替补)栏=>min_played=time(94.54=94.54)

  • “J”(姓名)栏中的玩家“Bowen J.”替换为“Anderson F.” “伯恩J.”民_=89 “安德森F.”上场分钟数=94.54减去89=>上场分钟数总计=5.54 该值应添加到第13行的“min_played”列中

    为什么第13排:因为他的名字在那里

  • 对于每一轮,我都必须应用这个过程

    #将结束时间转换为浮点
    def将_转换为_浮点(x):
    删除_char=lambda x:x.replace('','').replace('':'','')
    temp_list=remove_char(x).split(“+”)
    返回和([临时列表中i的浮动(i)])
    df['time']=df['time']。应用(将\u转换为\u浮点)
    #将子输出时间转换为浮点
    已播放的def min_(x):
    尝试:
    最小值=x.split(“”[0]。替换(“”,“”)
    返回convert_to_float(最小播放时间)
    除:
    通过
    df['min_played']=df['subs']。应用(min_played)
    indx=0
    对于df[‘状态’]中的x:
    如果(x='line-up')&(df.loc[indx,'subs']是np.nan)==True:
    df.loc[indx,'min_played']=df.loc[indx,'time']
    如果(x!='line-up')&(x!='sub')==True:
    df.loc[indx,'min_played']=0
    indx+=1
    过滤器=(df['status']=='line-up')
    df.loc[filter',sub_min_played']=df.loc[filter',time']-df.loc[filter',min_played']
    过滤器=(df[‘状态’!=‘排列’)和(df[‘状态’!=‘子’)
    df.loc[Filter,‘sub_min_played’]=0
    df['name']=df['name'].apply(lambda x:x.replace(“(C)”,”))
    df.to_csv('q.csv')
    
    根据您的用例,完整数据中可能有少数需要处理的边缘案例。但这应该是一个很好的起点

    df = pd.read_csv('SOSample.csv')
    def convert_to_float(x):
        remove_char = lambda x: x.replace(' ','').replace(':','.')
        temp_list = remove_char(x).split('+')
        return sum([float(i) for i in temp_list])
    
    df['time'] = df['time'].apply(convert_to_float)
    
    def min_played(time,subs,status):
        if status == 'line-up':
            if isinstance(subs,str):
                t = subs.split("'")[0]
                #eval to handle cases like `(90+3)`
                # eval("90+3") = 93
                return eval(t)
            else:
                return time
        return np.nan
        
    def sub_min_played(time,status,min_played):
        if time != min_played:
            return time-min_played
            
    df['min_played'] = df.apply(lambda x: min_played(x.time,x.subs,x.status),axis=1)
    df['sub_min_played'] = df.apply(lambda x: sub_min_played(x.time,x.status,x.min_played),axis=1)
    
    df
    
    输出:

    请提供示例数据和您当前的问题代码本身,而不是屏幕截图。完成所有操作后,我已更新我的postAdded my solution