鱼C论坛

 找回密码
 立即注册
查看: 33|回复: 6

Python 统计Excel单号透视如何去除重复

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

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

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

x
Python 统计Excel单号透视如何去除重复

  厂家  单号       运费      金额
  AB  14             10         7
BD   2      226.42     4.52
AC    2      226.42     4.52
AB   14    50            10

希望得出的结果是
厂家  单号(个数)       运费      金额

AB      2                        60         17
                              
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 4 小时前 | 显示全部楼层
您的问题可以通过 pandas 库实现。使用 groupby 分组后,对单号去重计数,同时累加运费和金额。

代码如下:


  1. import pandas as pd

  2. # 读取数据(假设数据在 DataFrame 中)
  3. data = {
  4.     '厂家': ['AB', 'BD', 'AC', 'AB'],
  5.     '单号': [14, 2, 2, 14],
  6.     '运费': [10, 226.42, 226.42, 50],
  7.     '金额': [7, 4.52, 4.52, 10]
  8. }
  9. df = pd.DataFrame(data)

  10. # 分组聚合:单号去重计数,运费和金额求和
  11. result = df.groupby('厂家').agg(
  12.     单号个数=('单号', lambda x: x.nunique()),  # 去重计数
  13.     运费=('运费', 'sum'),
  14.     金额=('金额', 'sum')
  15. ).reset_index()

  16. print(result)
复制代码


输出结果:

  1.   厂家  单号个数     运费    金额
  2. 0  AB        1   60.0  17.0
  3. 1  AC        1  226.42  4.52
  4. 2  BD        1  226.42  4.52
复制代码


说明:
1. groupby('厂家') 按厂家分组
2. agg 中:
   - 单号个数:使用 nunique() 对单号去重计数
   - 运费金额:直接求和
3. reset_index() 将厂家从索引变为列

如需保存到 Excel:

  1. result.to_excel('结果.xlsx', index=False)
复制代码


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

使用道具 举报

 楼主| 发表于 4 小时前 | 显示全部楼层
pivot_table透视的时候可以实现吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
冰菲 发表于 2026-01-23 17:47
pivot_table透视的时候可以实现吗


可以的!用 pivot_table 透视表也能实现去重统计。

代码如下:

import pandas as pd

# 读取数据
data = {
    '厂家': ,
    '单号': ,
    '运费': ,
    '金额':
}
df = pd.DataFrame(data)

# 使用 pivot_table 实现去重计数
result = pd.pivot_table(df,
                       index='厂家',
                       values=['单号', '运费', '金额'],
                       aggfunc={'单号': lambda x: len(x.unique()),  # 去重计数
                                '运费': 'sum',
                                '金额': 'sum'}
                       ).reset_index()

# 重命名列
result.columns =

print(result)

输出结果:

  厂家  单号(个数)     运费    金额
0  AB        1   60.0  17.0
1  AC        1  226.42  4.52
2  BD        1  226.42  4.52

关键点:
1. pivot_tableaggfunc 参数接受字典
2. lambda x: len(x.unique()) 实现对单号的去重计数
3. reset_index() 将厂家从索引变为列
4. columns 重命名列

对比说明:
- groupby:适合简单的分组聚合
- pivot_table:适合复杂的数据透视,可同时对不同列应用不同聚合函数

两种方法都能实现您的需求,选择哪种取决于个人习惯和代码可读性。

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

使用道具 举报

 楼主| 发表于 4 小时前 | 显示全部楼层
x是什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


在 lambda 函数中,x 代表的是每个分组中 单号 列的数据(一个 Pandas Series 对象)。

具体解释:
lambda x: len(x.unique()) 这个函数会:
1. 接收每个厂家分组下的 单号 列数据
2. 用 x.unique() 获取去重后的单号列表
3. 用 len() 计算去重后的数量

例如,对于厂家 AB:
x = Series([14, 14])  # 有两个单号都是14
x.unique() = [14]  # 去重后只剩一个
len(x.unique()) = 1  # 去重计数为1

所以 x 就是每个分组中 单号 列的具体数据,通过这个数据我们可以进行去重计数的操作。

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

使用道具 举报

发表于 1 小时前 | 显示全部楼层
很简单遍历一下:

  1. result = (
  2.     df
  3.     .groupby("厂家")
  4.     .agg(
  5.         单号个数=("单号", "nunique"),
  6.         运费=("运费", "sum"),
  7.         金额=("金额", "sum")
  8.     )
  9.     .reset_index()
  10. )

  11. print(result)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-23 22:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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