为索引中的不同子字符串选择带有for循环的Pandas Dataframe行

时间:2016-02-21 22:39:00

标签: python pandas

我有一个带索引的数据框:

               A         B         C         D
flowers blue  0.714550  0.208125 -0.216861  good
trucks red   -0.950056  1.779076  0.489394  average    
flowers red   0.249905  0.852931 -0.226787  bad
trucks blue   1.183972  1.120614  0.085162  good

现在我想通过以下函数选择包含我正在寻找的子串的所有行:

def select(df, substring):
    """Select by substring from Dataframe"""    
    for i in substring:
        return df[df.index.to_series().str.contains(i)] 

如果我尝试:

select(df, ['flowers', 'trucks'])

它只返回第一次迭代(鲜花)的数据选择。

对此有何看法?

1 个答案:

答案 0 :(得分:0)

您将在第一次迭代中返回该函数,因此它永远不会进入“卡车”参数。

你需要像

这样的东西
def select(df, substring):
    """Select by substring from Dataframe"""
    frames = []    
    for i in substring:
        frames.append(df[df.index.to_series().str.contains(i)])
    return pd.concat(frames)

虽然上面的函数可以按照与数据框中不同的顺序返回行。

我会使用像

这样的东西
def select(df, substring):
    return df[df.index.to_series().str.contains("|".join(substring))]

这里我们传递由管道运算符分隔的多个子字符串参数,如flowers|trucks