如何筛选出与Python中的大小写不同的数据帧记录?
我有一个由超过10k的记录组成的熊猫数据帧。我想在名称列表中保留一个或多个案例中包含所有名称的行。一个id可以等于多个案例 Id 2处于输出状态,因为如何筛选出与Python中的大小写不同的数据帧记录?,python,pandas,search,dataframe,filter,Python,Pandas,Search,Dataframe,Filter,我有一个由超过10k的记录组成的熊猫数据帧。我想在名称列表中保留一个或多个案例中包含所有名称的行。一个id可以等于多个案例 Id 2处于输出状态,因为bla2,bla3,bla4等于名称中的案例1。Id 5处于输出状态,因为bla6和bla7等于name列表中的case 4。 Id 1不在输出中,因为它没有bla3和bla7(case2)。等等 输入 id | name | [A LOT OF OTHER COLUMNS] | ----------------------------------
bla2
,bla3
,bla4
等于名称中的案例1
。Id 5处于输出状态,因为bla6
和bla7
等于name
列表中的case 4
。
Id 1不在输出中,因为它没有bla3
和bla7
(case2
)。等等
输入
id | name | [A LOT OF OTHER COLUMNS] |
--------------------------------------
1 | bla1 | [A LOT OF OTHER COLUMNS] |
2 | bla2 | [A LOT OF OTHER COLUMNS] |
2 | bla3 | [A LOT OF OTHER COLUMNS] |
2 | bla4 | [A LOT OF OTHER COLUMNS] |
3 | bla5 | [A LOT OF OTHER COLUMNS] |
4 | bla9 | [A LOT OF OTHER COLUMNS] |
5 | bla6 | [A LOT OF OTHER COLUMNS] |
5 | bla7 | [A LOT OF OTHER COLUMNS] |
6 | bla8 | [A LOT OF OTHER COLUMNS] |
id | name | [A LOT OF OTHER COLUMNS]
--------------------------------------
2 | bla2 |
2 | bla3 |
2 | bla4 |
5 | bla6 |
5 | bla7 |
所需输出
id | name | [A LOT OF OTHER COLUMNS] |
--------------------------------------
1 | bla1 | [A LOT OF OTHER COLUMNS] |
2 | bla2 | [A LOT OF OTHER COLUMNS] |
2 | bla3 | [A LOT OF OTHER COLUMNS] |
2 | bla4 | [A LOT OF OTHER COLUMNS] |
3 | bla5 | [A LOT OF OTHER COLUMNS] |
4 | bla9 | [A LOT OF OTHER COLUMNS] |
5 | bla6 | [A LOT OF OTHER COLUMNS] |
5 | bla7 | [A LOT OF OTHER COLUMNS] |
6 | bla8 | [A LOT OF OTHER COLUMNS] |
id | name | [A LOT OF OTHER COLUMNS]
--------------------------------------
2 | bla2 |
2 | bla3 |
2 | bla4 |
5 | bla6 |
5 | bla7 |
因为
names [
[bla2, bla3, bla4], #case 1
[bla1, bla3, bla7], #case 2
[bla3, bla1, bla6], #case 3
[bla6, bla7] #case 4
]
您可以使用with a bit modified with,以返回至少一个True
:
def f(x):
a = any([(x['name'].isin(y)).all() & pd.Series(y).isin(x['name']).all() for y in names])
return (a)
df1 = (df.groupby('id').filter(f))
print (df1)
id name [A LOT OF OTHER COLUMNS]
1 2 bla2 [A LOT OF OTHER COLUMNS]
2 2 bla3 [A LOT OF OTHER COLUMNS]
3 2 bla4 [A LOT OF OTHER COLUMNS]
6 5 bla6 [A LOT OF OTHER COLUMNS]
7 5 bla7 [A LOT OF OTHER COLUMNS]
你可以使用一个面具,即
acceptable = set([name1, name 2...])
df[df[name] in acceptable]
有点不对劲。它仍然会打印出一些记录,例如id=2
,这些记录的名称没有列在names
中:太棒了,这正是我要找的!我已经尝试了很多类似的事情,但从来没有得到它的工作。我试着在一条线上做这件事,显然这个df1解决了它。非常感谢!太好了,很高兴能帮上忙!如果我的答案有用,别忘了-点击复选标记(✓答案旁边的代码>),将其从灰显切换为填充。谢谢。我试着在我回答的地方投票,因为我记得很难获得声誉积分;)所以我以前提过,现在也提过你的老问题;)嗯,似乎需要a=any([(x['name'].isin(y)).all()&pd.Series(y).isin(x['name']).all()|(x['column3']<'2014-12-01').all()表示名称中的y])