鱼C论坛

 找回密码
 立即注册
查看: 30|回复: 5

Python处理Excel表格,需要统计实收费用和经纪费合计金额,单号需要统计去重复的个数

[复制链接]
发表于 5 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
df=pd.pivot_table(data11,values=['实收费用','经纪费金额','单号数量'],index=['渠道来源'],columns=None,aggfunc={'单号数量':'nunique','实收费用':'sum',''经纪费金额':'sum'}).reset_index()
df
df.columns = ['渠道来源', '实收费用', '经纪费金额','单号数量']


渠道来源        实收费用        经纪费金额        单号
河北分公司        1380        448                      0
河南业务部        879        882                      0
山东业务部        215        6653                      0



Python处理Excel表格,需要统计实收费用和经纪费合计金额,单号需要统计去重复的个数,但是这个代码运行后就变成单号数量和经纪费金额位置不对,应该互换一下才对,代码怎么修改?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 5 小时前 | 显示全部楼层
你的代码需要调整 pivot_table 的 aggfunc 字典顺序。修改如下:

  1. df = pd.pivot_table(data11,
  2.                     values=['实收费用', '经纪费金额', '单号'],
  3.                     index='渠道来源',
  4.                     aggfunc={'实收费用':'sum', '经纪费金额':'sum', '单号':'nunique'})
  5. df = df.reset_index()
  6. df.columns = ['渠道来源', '实收费用', '经纪费金额', '单号数量']
复制代码


关键修改点:
1. 在 aggfunc 字典中,将 实收费用 放在第一位,经纪费金额 放在第二位
2. 显式指定 values 参数
3. 重置索引后重命名列

如果仍有问题,建议先检查数据列的准确名称。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 小时前 | 显示全部楼层
df=pd.pivot_table(data11,values=['实收费用','经纪费金额','单号'],index=['渠道来源'],columns=None,aggfunc={'实收费用':'sum','经纪费金额':'sum','单号':'nunique'}).reset_index()
df
df.columns = ['渠道来源', '实收费用', '经纪费金额','单号']


更改后还是一样,位置是错的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 5 小时前 | 显示全部楼层
冰菲 发表于 2026-01-26 10:39
df=pd.pivot_table(data11,values=,index=,columns=No ...


你的问题是因为 pivot_table 输出的列顺序与 aggfunc 字典顺序不一致。需要通过调整列的顺序来解决。以下是修改后的代码:

  1. import pandas as pd

  2. # 假设 data11 包含列:渠道来源、实收费用、经纪费金额、单号
  3. df = pd.pivot_table(data11,
  4.                     index='渠道来源',
  5.                     values=['实收费用', '经纪费金额', '单号'],
  6.                     aggfunc={'实收费用':'sum', '经纪费金额':'sum', '单号':'nunique'}).reset_index()

  7. # 调整列的顺序
  8. df = df[['渠道来源', '实收费用', '经纪费金额', '单号']]

  9. # 重命名单号列为单号数量(可选)
  10. df.rename(columns={'单号':'单号数量'}, inplace=True)

  11. # 显示结果
  12. print(df)
复制代码


关键修改点:
1. 在 pivot_table 中明确指定 index 和 values 参数。
2. 使用 df[['渠道来源', '实收费用', '经纪费金额', '单号']] 手动调整列顺序。
3. 可选的重命名步骤,将单号列改为单号数量。

这样就能确保列的顺序为:渠道来源、实收费用、经纪费金额、单号数量。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 小时前 | 显示全部楼层
不对
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 5 小时前 | 显示全部楼层


你的问题在于pivot_table函数返回的列顺序可能与aggfunc字典中的顺序不一致。这是因为在Pandas中,字典的键在Python 3.6之前是无序的,但即使Python 3.7+保持了插入顺序,某些情况下pivot_table仍然可能不按这个顺序输出。

解决方案是手动重新排列列的顺序。请尝试以下代码:

df = pd.pivot_table(data11,
                    index='渠道来源',
                    values=,
                    aggfunc={'实收费用':'sum', '经纪费金额':'sum', '单号':'nunique'}).reset_index()

# 手动指定列的顺序
df = df

# 重命名单号列为单号数量(如果需要)
df.rename(columns={'单号':'单号数量'}, inplace=True)

print(df)

关键修改:
1. 使用df来手动调整列的顺序,确保它们按照你期望的顺序排列。
2. 确保括号内的列名与实际列名一致(包括大小写)。

如果问题仍然存在,请检查数据框data11的实际列名,可以使用以下代码查看:

print(data11.columns.tolist())

确保列名完全匹配。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-26 15:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表