通过布尔函数过滤 pandas 数据框
Filter a pandas dataframe by a boolean function
我需要仅对一列字符串使用函数来过滤 pandas 数据框。
这里是一个数据帧的例子:
ID Titles Values
0 1 title1 value1
1 2 title2 value2
2 3 title3 value3
...
我有一个复杂的功能:
def checkTitle(title:str) -> bool :
...
我想在标题列上用这个函数过滤第一个数据帧,只有函数发送 True 的行。
我尝试了类似的方法,但它 return 没有任何用处:
df = df.apply(checkTitle(df["Titles"]),axis=1)
你能帮忙吗?
您可以将该函数仅应用于数据框的一列,然后将生成的布尔系列用于 select 行:
select = df.Titles.apply(checkTitle)
df = df.loc[select, :]
我认为这可能是适合您的解决方案。
def checkTitle(title:str) -> bool:
if title == 'title2':
return True
else:
return False
df = pd.DataFrame({'ID': [1, 2, 3, 4], 'Titles': ['title1', 'title2', 'title2', 'title3'], 'Values': ['value1', 'value2', 'value2', 'value3']})
mask = df.Titles.apply(checkTitle)
df[mask]
我不详细了解你的功能,但你需要 return 两个 bool 值 True|False 来切片数据帧。
我希望这个解决方案对您有所帮助
此致,
我需要仅对一列字符串使用函数来过滤 pandas 数据框。
这里是一个数据帧的例子:
ID Titles Values
0 1 title1 value1
1 2 title2 value2
2 3 title3 value3
...
我有一个复杂的功能:
def checkTitle(title:str) -> bool :
...
我想在标题列上用这个函数过滤第一个数据帧,只有函数发送 True 的行。
我尝试了类似的方法,但它 return 没有任何用处:
df = df.apply(checkTitle(df["Titles"]),axis=1)
你能帮忙吗?
您可以将该函数仅应用于数据框的一列,然后将生成的布尔系列用于 select 行:
select = df.Titles.apply(checkTitle)
df = df.loc[select, :]
我认为这可能是适合您的解决方案。
def checkTitle(title:str) -> bool:
if title == 'title2':
return True
else:
return False
df = pd.DataFrame({'ID': [1, 2, 3, 4], 'Titles': ['title1', 'title2', 'title2', 'title3'], 'Values': ['value1', 'value2', 'value2', 'value3']})
mask = df.Titles.apply(checkTitle)
df[mask]
我不详细了解你的功能,但你需要 return 两个 bool 值 True|False 来切片数据帧。
我希望这个解决方案对您有所帮助
此致,