You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:21:05