Python 统计Excel单号透视如何去除重复
Python 统计Excel单号透视如何去除重复厂家单号 运费 金额
AB14 10 7
BD 2 226.42 4.52
AC 2 226.42 4.52
AB 14 50 10
希望得出的结果是
厂家单号(个数) 运费 金额
AB 2 60 17
您的问题可以通过 pandas 库实现。使用 groupby 分组后,对单号去重计数,同时累加运费和金额。
代码如下:
import pandas as pd
# 读取数据(假设数据在 DataFrame 中)
data = {
'厂家': ['AB', 'BD', 'AC', 'AB'],
'单号': ,
'运费': ,
'金额':
}
df = pd.DataFrame(data)
# 分组聚合:单号去重计数,运费和金额求和
result = df.groupby('厂家').agg(
单号个数=('单号', lambda x: x.nunique()),# 去重计数
运费=('运费', 'sum'),
金额=('金额', 'sum')
).reset_index()
print(result)
输出结果:
厂家单号个数 运费 金额
0AB 1 60.017.0
1AC 1226.424.52
2BD 1226.424.52
说明:
1. groupby('厂家') 按厂家分组
2. agg 中:
- 单号个数:使用 nunique() 对单号去重计数
- 运费 和 金额:直接求和
3. reset_index() 将厂家从索引变为列
如需保存到 Excel:
result.to_excel('结果.xlsx', index=False)
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 pivot_table透视的时候可以实现吗 冰菲 发表于 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)
输出结果:
厂家单号(个数) 运费 金额
0AB 1 60.017.0
1AC 1226.424.52
2BD 1226.424.52
关键点:
1. pivot_table 的 aggfunc 参数接受字典
2. lambda x: len(x.unique()) 实现对单号的去重计数
3. reset_index() 将厂家从索引变为列
4. columns 重命名列
对比说明:
- groupby:适合简单的分组聚合
- pivot_table:适合复杂的数据透视,可同时对不同列应用不同聚合函数
两种方法都能实现您的需求,选择哪种取决于个人习惯和代码可读性。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 x是什么?
冰菲 发表于 2026-01-23 17:56
x是什么?
在 lambda 函数中,x 代表的是每个分组中 单号 列的数据(一个 Pandas Series 对象)。
具体解释:
lambda x: len(x.unique()) 这个函数会:
1. 接收每个厂家分组下的 单号 列数据
2. 用 x.unique() 获取去重后的单号列表
3. 用 len() 计算去重后的数量
例如,对于厂家 AB:
x = Series()# 有两个单号都是14
x.unique() = # 去重后只剩一个
len(x.unique()) = 1# 去重计数为1
所以 x 就是每个分组中 单号 列的具体数据,通过这个数据我们可以进行去重计数的操作。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 很简单遍历一下:
result = (
df
.groupby("厂家")
.agg(
单号个数=("单号", "nunique"),
运费=("运费", "sum"),
金额=("金额", "sum")
)
.reset_index()
)
print(result)
页:
[1]