我有一个带索引的数据框:
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'])
它只返回第一次迭代(鲜花)的数据选择。
对此有何看法?
答案 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