Python 3.x 基于某些条件填充熊猫栏的逻辑
我正在寻求帮助,以找到一个关于如何通过应用一些条件将新列添加到df的良好逻辑 将根据某些条件创建列“O”(min_Play):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.
#将结束时间转换为浮点
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