在pandas数据框中选择行

3

我有一个数据框,称为(df),其中包含列statecitypincode

我可以按如下方式选择特定州中的所有城市行。

requiredState = 'ABC'
requiredCity  = 'XYZ'

newDf = df[ (df['city']== requiredCity) & (df['state']==requiredState) ]

现在我想选择一个州中所有城市的所有行。因此,只需删除城市条件即可完成此操作:
```sql SELECT * FROM table_name WHERE state = '某个州'; ```
newDf = df[ (df['state'] == requiredState) ]

这将给我一个州的所有城市。

我的问题是,是否有一种方法,我不需要删除城市条件,就可以得到该州的所有城市?

也就是说,类似于

requiredCity = ALL
nDf = df[ (df['city']== requiredCity) & (df['state']==requiredState) ]

我们能否传递一个所需城市列表而不是全部城市?
例如:
requiredCity = ['city1','city2']

非常感谢您的编辑。 - undefined
1
你好 Jezrael。继续分享知识,欢迎你。 - undefined
2个回答

4

我认为你需要使用isin,但是requiredCity必须在list中,所以可以添加一个新条件,并用|(或)链接到原始条件:

df = pd.DataFrame({'city':list('abcdef'),
                   'pincode':[4,5,4,5,5,4],
                   'state':list('aaabbb')})

print (df)
  city  pincode state
0    a        4     a
1    b        5     a
2    c        4     a
3    d        5     b
4    e        5     b
5    f        4     b


requiredState = 'a'
requiredCity = ['ALL']

m1 = ('ALL' in requiredCity) | (df['city'].isin(requiredCity))
m2 = (df['state']==requiredState)
newDf = df[m1 & m2]
print (newDf)
  city  pincode state
0    a        4     a
1    b        5     a
2    c        4     a

requiredState = 'a'
requiredCity = ['a','c']

m1 = ('ALL' in requiredCity) | (df['city'].isin(requiredCity))
m2 = (df['state']==requiredState)
newDf = df[m1 & m2]
print (newDf)
  city  pincode state
0    a        4     a
2    c        4     a

requiredState = 'a'
requiredCity = ['a']

m1 = ('ALL' in requiredCity) | (df['city'].isin(requiredCity))
m2 = (df['state']==requiredState)
newDf = df[m1 & m2]
print (newDf)
  city  pincode state
0    a        4     a

1
 requiredCity = ['city1', 'city2']
 df[(df['city'].apply(lambda x : x in requiredCity)) & (df['state'] == requiredState)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接