Python 如果列字符串包含X和[Y,Z]中的至少一个,则捕获行
我的数据是这样的,家庭成员有三种不同的出身(荷兰、美国、法国): 我想把它们分为三类:Python 如果列字符串包含X和[Y,Z]中的至少一个,则捕获行,python,pandas,Python,Pandas,我的数据是这样的,家庭成员有三种不同的出身(荷兰、美国、法国): 我想把它们分为三类: 荷兰家庭 拥有1名荷兰人和至少1名法国人或美国人的家庭 非荷兰家庭 类别1由以下代码捕获: ~df['households'].str.contains("French", "American") 我在寻找第2类和第3类的解决方案。我的想法如下: Mixed households df['households'].str.contains("Dutch&qu
~df['households'].str.contains("French", "American")
我在寻找第2类和第3类的解决方案。我的想法如下:
Mixed households
df['households'].str.contains("Dutch" and ("French" or "American"))
但这个解决方案不起作用,因为它还捕获了只包含法国成员的行。
如何在此上下文中正确执行此“and”语句?让我们尝试
str.get_dummies
为列Househouse
创建虚拟指标变量的数据帧,然后根据指定条件创建布尔掩码m1、m2、m3
,最后使用这些掩码过滤掉行:
c = df['Household'].str.get_dummies(sep=' ')
m1 = c['Dutch'].eq(1) & c[['American', 'French']].eq(0).all(1)
m2 = c['Dutch'].eq(1) & c[['American', 'French']].eq(1).any(1)
m3 = c['Dutch'].eq(0)
详细信息:
>>> c
American Dutch French
0 1 1 1
1 0 1 1
2 1 0 0
3 1 1 0
4 1 0 1
5 0 1 0
>>> df[m1] # category 1
Household
5 Dutch Dutch
>>> df[m2] # category 2
Household
0 Dutch American Dutch French
1 Dutch Dutch French
3 American Dutch
>>> df[m3] # category 3
Household
2 American American
4 French American
>>> c
American Dutch French
0 1 1 1
1 0 1 1
2 1 0 0
3 1 1 0
4 1 0 1
5 0 1 0
>>> df[m1] # category 1
Household
5 Dutch Dutch
>>> df[m2] # category 2
Household
0 Dutch American Dutch French
1 Dutch Dutch French
3 American Dutch
>>> df[m3] # category 3
Household
2 American American
4 French American