Python代码缩进错误排查及按销售额匹配城市需求实现求助
问题分析与代码修正
任务需求
- 在
merged_df与city_df中匹配customer_state列,根据merged_df的quantity_of_sales,将merged_df的customer_city替换为city_df中的对应城市。 - 销售额最高的记录应匹配人口最多的城市(
city_df中人口列名为2020)
原代码尝试
# Merge merged_df with City_df based on the 'State' column merged_state_df = pd.merge(merged_df, City_df[['city', 'State']], on='State', how='left') # Sort df_sorted by '2020' column in descending order = df_sorted.sort_values(by='2020', ascending=False) # Iterate over each group of customers in the same state for state, group in merged_state_df.groupby('customer_state'): # Find the city with the largest quantity_of_sales from df_sorted largest_city = df_sorted_descending[df_sorted_descending['State'] == state].iloc[0]['city'] # Update the 'customer_city' in the merged DataFrame with the largest city mergered_state_df.loc[group.index, 'customer_city'] = largest_city # Display the updated merged DataFrame print(merged_state_df.head())
错误信息
文件"",第13行 mergered_state_df.loc[group.index, 'customer_city'] = largest_city ^ IndentationError: unindent does not match any outer indentation level
代码问题及修正
你的代码存在多处语法和逻辑问题,逐一说明并修正:
1. 缩进错误
Python依赖缩进区分代码块,for循环内的代码必须统一缩进(通常用4个空格),原代码中循环后的两行代码未缩进,直接导致语法错误。
2. 变量赋值缺失
= df_sorted.sort_values(...)这行缺少变量名,后续代码用到了df_sorted_descending,这里应该把排序结果赋值给该变量。
3. 列名不匹配
合并时用on='State',但merged_df中的州列名是customer_state,两者不统一会导致匹配失败。
4. 拼写错误
mergered_state_df是拼写错误,正确应为merged_state_df。
修正后的代码
import pandas as pd # 统一州列名,确保两个DataFrame匹配 city_df = city_df.rename(columns={'State': 'customer_state'}) # 合并DataFrame,关联州列 merged_state_df = pd.merge(merged_df, city_df[['city', 'customer_state', '2020']], on='customer_state', how='left') # 按2020年人口降序排序,提取每个州人口最多的城市 df_sorted_descending = city_df.sort_values(by='2020', ascending=False) state_top_city = df_sorted_descending.drop_duplicates('customer_state').set_index('customer_state')['city'].to_dict() # 批量替换城市列,比循环更高效 merged_state_df['customer_city'] = merged_state_df['customer_state'].map(state_top_city) # 按销售额降序排序,确保高销售额记录匹配对应州人口最多的城市 merged_state_df = merged_state_df.sort_values(by='quantity_of_sales', ascending=False) # 展示结果 print(merged_state_df.head())
补充说明
- 用字典映射替换循环,处理大数据量时效率更高;
- 先统一列名,避免因字段名不一致导致的匹配失败;
- 先提取每个州的顶级城市再批量替换,逻辑更清晰。
内容的提问来源于stack exchange,提问作者anarchy
相关产品推荐
相关产品推荐

