有没有一种简单的方法可以通过多列的内容过滤Python中的数据帧?
我有一个数据帧,在不同的变量上有多个编码(比如Adress 1=“foo”、Adress 2=“bar”等,其他变量也是如此) 我想写一个脚本,可以用'any address=“foo”'的方式过滤数据帧,并可以接受要过滤的变量的用户输入。有没有办法做到这一点,或者我需要为每个变量分别编写脚本?(我心里已经有了一个解决方案,我只想有一个更为悲壮的解决方案) 我的数据框看起来像这样有没有一种简单的方法可以通过多列的内容过滤Python中的数据帧?,python,pandas,Python,Pandas,我有一个数据帧,在不同的变量上有多个编码(比如Adress 1=“foo”、Adress 2=“bar”等,其他变量也是如此) 我想写一个脚本,可以用'any address=“foo”'的方式过滤数据帧,并可以接受要过滤的变量的用户输入。有没有办法做到这一点,或者我需要为每个变量分别编写脚本?(我心里已经有了一个解决方案,我只想有一个更为悲壮的解决方案) 我的数据框看起来像这样 Adress 1 Adress 2 Family Name 1 Family Name 2 0 Austi
Adress 1 Adress 2 Family Name 1 Family Name 2
0 Austin New York Miller Baker
1 Paris Austin Smith Yang
2 Detroit Kopenhagen Baker Smith
我想让用户能够请求一个类似Adress=Austin的过滤器,输出如下所示:
Adress 1 Adress 2 Family Name 1 Family Name 2
0 Austin New York Miller Baker
1 Paris Austin Smith Yang
创建一个数据帧
df = pd.DataFrame({'Address1':['Austin','Paris', 'Houston'], 'Address2':['New York', 'Austin', 'SF'], 'FamilyName1':['Miller', 'Smith', 'John'], 'FamilyName2':['Baker', 'Yang', 'Peter']})
检查哪些列包含字符串地址,然后验证其中哪些变量的值为“Austin”
ndf = df.loc[:, list(df.columns[df.columns.str.contains(pat = 'Address')])] == 'Austin'
如果某行包含True,则汇总到列表中
list(ndf.any(1))
选择包含True的行,在本例中为Austin:
df[list(ndf.any(1))]
创建一个数据帧
df = pd.DataFrame({'Address1':['Austin','Paris', 'Houston'], 'Address2':['New York', 'Austin', 'SF'], 'FamilyName1':['Miller', 'Smith', 'John'], 'FamilyName2':['Baker', 'Yang', 'Peter']})
检查哪些列包含字符串地址,然后验证其中哪些变量的值为“Austin”
ndf = df.loc[:, list(df.columns[df.columns.str.contains(pat = 'Address')])] == 'Austin'
如果某行包含True,则汇总到列表中
list(ndf.any(1))
选择包含True的行,在本例中为Austin:
df[list(ndf.any(1))]
请在示例输入和预期输出的帮助下解释这一点。像这样的表达式
df[(df['A']==1)和(df['B']==2)]
可以完成这项工作。@RuthgerRighart是的,这可以工作,但是我需要为我的每个变量编写一个单独的函数,我希望有一个更简单的解决方案。请在示例输入和预期输出的帮助下对此进行解释。像这样的表达式df[(df['a']==1)和(df['B']==2)]
可以完成这项工作。@RuthgerRighart是的,这是可行的,但我需要为我的每个变量编写一个单独的函数,我希望有一个更简单的解决办法。