我有一个供应商和产品的excel,其中supplier B和supplier D是特殊供应商:
供应商 | 产品 |
---|---|
Supplier A | Product A |
Supplier B | Product A |
Supplier C | Product A |
…… | …… |
Supplier A | Product B |
Supplier C | Product C |
Supplier D | Product C |
我想用Python输出如下信息:
产品 | 供应商 | 供应商数量 | 特殊供应商数量 |
---|---|---|---|
Product A | Supplier A, Supplier B, Supplier C | 3 | 1 |
Product B | Supplier A | 1 | 0 |
Product C | Supplier C, Supplier D | 2 | 1 |
Python的pandas库
import pandas as pd
# 读取excel文件
df = pd.read_excel('你的文件名.xlsx')
# 查找包含特殊供应商的行
special_suppliers = ['Supplier B', 'Supplier D']
is_special_supplier = df['供应商'].isin(special_suppliers)
df['特殊供应商'] = is_special_supplier
# 计算产品的供应商数量和特殊供应商数量
agg_func = {'供应商': lambda x: ', '.join(x.unique()), '特殊供应商': 'sum'}
result = df.groupby('产品').agg(agg_func)
# 重置索引,并修改列名
result = result.reset_index()
result = result.rename(columns={'供应商': '供应商列表', '特殊供应商': '特殊供应商数量'})
# 输出结果
print(result)
您可以使用 Pandas 库读取 Excel 文件并进行分组和计数,然后生成您需要的报告。以下是可能的 Python 代码:
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('your_file_name.xlsx')
# 分组并计数
grouped = df.groupby('产品')['供应商'].agg(['count', lambda x: ', '.join(set(x))])
# 计算特殊供应商数量
special_suppliers = {'Supplier B', 'Supplier D'}
grouped['特殊供应商数量'] = grouped['<lambda>'].apply(lambda x: sum(1 for s in x.split(', ') if s in special_suppliers))
# 生成报告
report = grouped.rename(columns={'count': '供应商数量', '<lambda>': '供应商'}).reset_index()
report = report[['产品', '供应商', '供应商数量', '特殊供应商数量']]
print(report)
在这个代码中,我们首先使用 Pandas 的 read_excel() 函数读取 Excel 文件。然后,我们使用 groupby() 函数按照产品分组,并使用 agg() 函数计算每个产品的供应商数量和供应商名称。
接下来,我们使用 apply() 函数计算每个产品的特殊供应商数量。在这个函数中,我们首先使用 Python 的集合类型定义了特殊供应商的名称。然后,我们使用字符串的 split() 方法将供应商名称拆分为列表,然后使用 Python 的 sum() 函数计算特殊供应商数量。
最后,我们使用 Pandas 的 rename() 函数重命名列名,并使用 reset_index() 函数将产品名称转换为列。最后,我们使用 print() 函数输出报告。
请注意,这个代码假定供应商名称列的列名为“供应商”,产品名称列的列名为“产品”。如果您的 Excel 文件中的列名不同,请相应地更改代码中的列名。