【问题标题】:Loop through a column and slice values based on condition根据条件循环遍历列和切片值
【发布时间】:2020-10-24 09:36:25
【问题描述】:

我正在尝试遍历“团队”列并返回团队的一部分以删除符合特定条件的数字和“-”。

    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

【问题讨论】:

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


【解决方案1】:

试试这个,
这将删除数字和“-”。

def slice(x):
    x = x.split('-')
    return x[::-1][0]

NBA['Team'] = NBA['Team'].apply(slice)

输出将是

有团队精神的人 0 迈阿密热火队吉米巴特勒 1 波士顿凯尔特人队 杰森塔图姆 2休斯顿火箭队詹姆斯哈登

【讨论】:

  • 你有 str 访问器来简化字符串操作
  • 虽然此解决方案确实对数字和“-”进行了切片,但它不使用条件。我需要切片只发生在数字为 1 或 2 而不是 3 的情况下
【解决方案2】:

你的功能有点不对劲。首先,您需要两个语句中的操作数。其次,您不想遍历每个字符串(这就是它正在做的事情)。它包含每个字符串的每个字符,而您真正想要的只是每个字符串。如果不满足条件,您还需要返回一些东西。

我也会让它更健壮。如果一个团队以 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2018-02-02
    相关资源
    最近更新 更多