Python 为索引中的不同子字符串选择具有for循环的数据帧行
我有一个带有索引的数据帧:Python 为索引中的不同子字符串选择具有for循环的数据帧行,python,pandas,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.
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'])
它只返回第一次迭代的数据选择(flowers)
有什么想法吗?您在第一次迭代时返回函数本身,因此它永远不会进入“trucks”参数 你需要像这样的东西
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))]
尽管上述函数可以返回与数据帧中不同的行顺序
我会用像这样的东西
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
您将在第一次迭代时返回函数本身,因此它永远不会到达“trucks”参数
你需要像这样的东西
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))]
尽管上述函数可以返回与数据帧中不同的行顺序
我会用像这样的东西
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
为什么不执行df.loc[df.index.to_series().str.contains(['flowers',trucks'])]
?为什么不执行df.loc[df.index.to_series().str.contains(['flowers',trucks'])]
?干杯。正是我想要的。干杯。正是我想要的。