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

如何在Pandas中先展示原始DataFrame输出再展示修改后输出

Pandas:先展示筛选后原始数据,再输出修改后结果

问题说明

作为新手,需要实现:先输出筛选排序后的原始DataFrame,再输出修改后的同格式DataFrame。要求仅对符合条件(esal≤1300000且country name为Indonesia或USSR)的esal值翻倍,其他列保持不变。

原始代码

import pandas as pd

source = r'C:\Users\pulun\hbrag08\Durga Software\Complete Python Package\Python for Data Science\04. Pandas\DataFrame\employee_data.csv'
df = pd.read_csv(source,
                   usecols=['eno','ename','esal','city','country'],
                   index_col='eno',
                   sep=';')

df.rename(columns={'country': 'country name'},inplace=True)

print(df.sort_values(['esal']).loc[df['country name'].isin(
    ['Indonesia', 'USSR'])].head(n=6))


df.loc[(df['esal'] <= 1300000) & (df['country name'].isin(
    ['Indonesia', 'USSR']))] = df.loc[(df['esal'] <= 1300000) & (df['country name'].isin(
        ['Indonesia', 'USSR']))].apply(lambda x: x*2)

print('your solution here')

原始输出

ename        esal                    city country name
eno
2840       Duffy Stood  1039768.45    9488 Milwaukee Plaza         USSR
5590     Sawyere Clogg  1096587.82  3409 Rockefeller Alley         USSR
730       Garret Attew  1104028.84          7 Walton Point         USSR
9040    Marve Coalburn  1207724.68          97 Susan Point         USSR
1620   Chrotoem Cleeve  1280881.36                     NaN         USSR
9500  Eleanore Cabrera  1294722.19          2401 Hovde Way    Indonesia

期望输出

ename        esal                    city country name
eno
2840       Duffy Stood  2079536.90   9488 Milwaukee Plaza         USSR
5590     Sawyere Clogg  2193175.64  3409 Rockefeller Alley         USSR
730       Garret Attew  2208057.68          7 Walton Point         USSR
9040    Marve Coalburn  1207724.68          97 Susan Point         USSR
1620   Chrotoem Cleeve  2415449.36                     NaN         USSR
9500  Eleanore Cabrera  2589444.38          2401 Hovde Way    Indonesia

解决方案

问题分析

原代码的apply(lambda x:x*2)会对整行所有列执行乘法操作,包括字符串类型的ename、city(字符串乘2会重复两次,比如"abc"变成"abcabc"),不符合需求。另外,修改后没有按原始筛选格式输出结果。

修正代码

import pandas as pd

source = r'C:\Users\pulun\hbrag08\Durga Software\Complete Python Package\Python for Data Science\04. Pandas\DataFrame\employee_data.csv'
df = pd.read_csv(source,
                   usecols=['eno','ename','esal','city','country'],
                   index_col='eno',
                   sep=';')

df.rename(columns={'country': 'country name'},inplace=True)

# 1. 定义通用筛选条件,保存筛选排序后的原始结果
filter_condition = df['country name'].isin(['Indonesia', 'USSR'])
sorted_original_df = df.sort_values(['esal']).loc[filter_condition].head(n=6)

# 2. 打印原始筛选数据
print("=== 原始筛选数据 ===")
print(sorted_original_df)

# 3. 仅对符合条件的esal列翻倍,避免修改其他列
modify_condition = (df['esal'] <= 1300000) & filter_condition
df.loc[modify_condition, 'esal'] *= 2

# 4. 按相同格式打印修改后的数据
print("\n=== 修改后数据 ===")
print(df.sort_values(['esal']).loc[filter_condition].head(n=6))

代码说明

  • 定义通用筛选条件filter_condition,减少重复代码
  • 提前保存原始筛选排序结果,确保前后输出格式完全一致
  • 仅针对esal列执行翻倍操作,不会改动字符串类型的列
  • 分模块打印原始和修改后的数据,逻辑清晰易读

内容的提问来源于stack exchange,提问作者doughstone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:17:43