循环遍历列并根据条件切片值

时间:2020-07-03 16:13:20

标签: python python-3.x pandas loops slice

我试图遍历“团队”列,并返回团队的一部分以删除数字和满足特定条件的“-”。

    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

2 个答案:

答案 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)