一、每日一题
数据集如下:
data = [['Afghanistan', 'Asia', 652230, 25500100, 20343000000],
['Albania', 'Europe', 28748, 2831741, 12960000000],
['Algeria', 'Africa', 2381741, 37100000, 188681000000],
['Andorra', 'Europe', 468, 78115, 3712000000],
['Angola', 'Africa', 1246700, 20609294, 100990000000]]
world = pd.DataFrame(data,
columns=['name', 'continent', 'area', 'population', 'gdp']).astype
({'name':'object', 'continent':'object', 'area':'Int64', 'population':'Int64', 'gdp':'Int64'})
解答:
import pandas as pd
def big_countries(world: pd.DataFrame) -> pd.DataFrame:
# 筛选大国:面积 >= 3000000 或 人口 >= 25000000
large_countries = world[(world['area'] >= 3000000)
| (world['population'] >= 25000000)]
# 输出大国的国家名称、人口和面积
return large_countries[['name', 'population', 'area']]
题源:Leetcode
二、总结
本题用到了布尔索引。在Pandas中,布尔索引是一种强大的功能,它允许你根据条件选择DataFrame或Series中的数据子集。具体到本题中,如果我们有一个包含国家信息的DataFrame,并希望筛选出满足特定条件(比如面积大于300万平方公里或人口超过2500万)的“大国”,我们可以使用布尔索引来完成这一任务。
布尔索引步骤
-
构建条件表达式:首先,你需要创建一个或多个表达式来表示你的筛选条件。对于数值类型的列,你可以直接比较大小;对于类别或其他类型的数据,可能需要使用
.isin()
等方法来匹配值。 -
应用条件:将这些条件应用到DataFrame上,这会返回一个布尔值的Series,其中True表示该行满足条件,False则不满足。
-
用作索引:最后,你可以直接把这个布尔Series用作DataFrame的索引来选取数据。
下面举一个例子:
假设我们已经有了一个名为df
的DataFrame,包含国家数据:
import pandas as pd
# 示例数据
data = {'Country': ['China', 'India', 'USA', 'Canada', 'Australia'],
'Population': [1444216107, 1393409038, 332639102, 38005238, 25892626],
'Area': [9600000, 3287263, 9372610, 9984670, 7692024]}
df = pd.DataFrame(data)
# 布尔索引条件:面积大于300万平方公里 OR 人口超过2500万
is_large_area = df['Area'] > 3000000
is_large_population = df['Population'] > 25000000
large_countries_condition = is_large_area | is_large_population
# 应用条件筛选大国
large_countries = df[large_countries_condition]
print(large_countries)
总之,布尔索引使得根据复杂条件筛选数据变得直接而高效,是数据分析中不可或缺的工具之一。
2024.5.17