我试图遍历“团队”列,并返回团队的一部分以删除数字和满足特定条件的“-”。
Team Player
0 1-Miami Heat Jimmy Butler
1 2-Boston Celtics Jason Tatum
2 3-Houston Rockets James Harden
我当前正在使用:
def slice(x):
for elm in x:
if elm[0] == '1' or '2':
return elm[2:]
NBA['Team'] = NBA['Team'].apply(slice)
这将为每个团队返回一个空值。
I would like to return this:
Team Player
0 Miami Heat Jimmy Butler
1 Boston Celtics Jason Tatum
2 3-Houston Rockets James Harden
答案 0 :(得分:0)
尝试一下,
这将删除数字和'-'。
def slice(x):
x = x.split('-')
return x[::-1][0]
NBA['Team'] = NBA['Team'].apply(slice)
输出将为
Team Player 0 Miami Heat Jimmy Butler 1 Boston Celtics Jason Tatum 2 Houston Rockets James Harden
答案 1 :(得分:0)
您的功能有点关闭。首先,两个语句中都需要操作数。其次,您不想遍历每个字符串(这就是它的作用)。当您真正想要的只是每个字符串时,它接受每个字符串的每个字符。如果不满足条件,您还需要返回一些东西。
我还将使其更强大。如果团队以11或12开始怎么办?它将使您从12-Chicago Bulls
到-Chicago Bulls
。因此,不要在索引上固定切片,而在-
处拆分(请参阅最后的最终解决方案)
因此,请调整功能:
def slice(x):
if x[0] == '1' or x[0] == '2':
return x[2:]
else:
return x
还有其他方法可以做到:
def slice(x):
if x.startswith('1') or x.startswith('2'):
return x[2:]
else:
return x
或将它们组合成一个列表并使用该列表:
def slice(x,check_list=['1','2']):
if x.startswith(tuple(check_list)) :
return x[2:]
else:
return x
更强大
import pandas as pd
df = pd.DataFrame({'Team':['1-Miami Heat','2-Boston Celtics','3-Houston Rockets','15-Chicago Bulls'],
'Player':['Jimmy Butler','Jason Tatum','James Harden', 'Zach LaVine']})
def slice(x,check_list=['1','2']):
val, team = x.split('-')[0], x.split('-')[-1]
if val in check_list:
return team
else:
return x
df['Team'] = df['Team'].apply(slice)