冰菲 发表于 6 天前

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

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表格,需要统计实收费用和经纪费合计金额,单号需要统计去重复的个数,但是这个代码运行后就变成单号数量和经纪费金额位置不对,应该互换一下才对,代码怎么修改?

FishC 发表于 6 天前

你的代码需要调整 pivot_table 的 aggfunc 字典顺序。修改如下:

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

冰菲 发表于 6 天前

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


更改后还是一样,位置是错的

FishC 发表于 6 天前

冰菲 发表于 2026-01-26 10:39
df=pd.pivot_table(data11,values=,index=,columns=No ...

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

import pandas as pd

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

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

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

# 显示结果
print(df)

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

冰菲 发表于 6 天前

不对

FishC 发表于 6 天前

冰菲 发表于 2026-01-26 10:44
不对

你的问题在于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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Python处理Excel表格,需要统计实收费用和经纪费合计金额,单号需要统计去重复的个数