MST

星途 面试题库

面试题:Python Pandas复杂条件下的索引与筛选技巧综合应用

假设有一个DataFrame,包含'城市'、'年份'、'季度'、'销售额'等列。现在要求使用Pandas,筛选出所有'一线城市'(假设为'北京'、'上海'、'广州'、'深圳')在2020 - 2022年期间每个季度销售额同比增长超过10%的数据,并以合适的格式输出。请用Python代码完整实现,并说明每一步的思路。
26.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import pandas as pd

# 假设这是创建DataFrame的代码,实际应用中数据可能从文件或数据库读取
data = {
    '城市': ['北京', '上海', '广州', '深圳', '北京', '上海', '广州', '深圳', '北京', '上海', '广州', '深圳', '北京', '上海', '广州', '深圳'],
    '年份': [2019, 2019, 2019, 2019, 2020, 2020, 2020, 2020, 2021, 2021, 2021, 2021, 2022, 2022, 2022, 2022],
    '季度': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    '销售额': [100, 200, 150, 250, 120, 230, 170, 280, 140, 260, 190, 310, 160, 290, 210, 340]
}
df = pd.DataFrame(data)

# 思路1:筛选出一线城市的数据
first_tier_cities = ['北京', '上海', '广州', '深圳']
filtered_df = df[df['城市'].isin(first_tier_cities)]

# 思路2:筛选出2020 - 2022年的数据
filtered_df = filtered_df[(filtered_df['年份'] >= 2020) & (filtered_df['年份'] <= 2022)]

# 思路3:计算同比增长率,需要先对数据按城市和季度分组,然后移位计算同比
filtered_df.sort_values(by=['城市', '年份', '季度'], inplace=True)
filtered_df['同比增长率'] = filtered_df.groupby(['城市', '季度'])['销售额'].pct_change() * 100

# 思路4:筛选出同比增长超过10%的数据
result_df = filtered_df[filtered_df['同比增长率'] > 10]

# 输出结果
print(result_df)
  1. 数据准备
    • 这里使用字典创建了一个简单的DataFrame,实际中可能是从CSV文件、数据库等读取数据。
  2. 筛选一线城市
    • 使用isin方法筛选出城市列中属于一线城市的数据。
  3. 筛选2020 - 2022年的数据
    • 使用布尔索引,通过>=<=运算符筛选出符合年份范围的数据。
  4. 计算同比增长率
    • 先对数据按城市年份季度排序。
    • 使用groupby城市季度分组,然后使用pct_change方法计算每个组内销售额的同比增长率,并乘以100转换为百分比形式。
  5. 筛选同比增长超过10%的数据
    • 再次使用布尔索引,筛选出同比增长率大于10的数据。
  6. 输出结果
    • 使用print函数输出最终结果。