pandas 使用数据框创建多个Excel/csv

1l5u6lss  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(137)

我是Python编程的新手,我正在尝试思考如何从一个数据框创建多个excel。我有一个Pandas数据框,如下所示,
| 发票编号|凭证ID|索赔|
| - ------|- ------|- ------|
| 日本MHI00000038710|小行星100039|是的|
| 日本MHI00000038715|小行星100039|没有|
| 日本MHI00000038711|小行星100043|是的|
| 日本MHI00000038712|小行星100043|没有|
对于每个凭证ID,我试图从数据框中为每个发票编号创建excel,其中Claimed = Yes。但是每个excel应包含相同凭证ID的所有行,而不管Claimed是Yes/No。对于上例,输出将是2个excel,以每个发票编号命名,其中Claimed = Yes(即MHI000000038710和MHI000000038711)。
每个Excel应包含按凭证ID分组的行
电子表格1(MHI00000038710.xlsx):-
| 发票编号|凭证ID|索赔|
| - ------|- ------|- ------|
| 日本MHI00000038710|小行星100039|是的|
| 日本MHI00000038715|小行星100039|没有|
电子表格2(MHI00000038711.xlsx):-
| 发票编号|凭证ID|索赔|
| - ------|- ------|- ------|
| 日本MHI00000038711|小行星100043|是的|
| 日本MHI00000038712|小行星100043|没有|
我的脚本,目前正在创建excel的所有发票。我无法弄清楚如何不创建发票索赔=否,但仍然有发票中的所有行创建索赔=是

for myid in df['Voucher ID'].unique():
    df_singleID = df[df['Voucher ID']==myid]
    for myinvoice in df_singleID['Invoice No'].unique():
        df_singleID.to_excel(output+"\\"+str(myinvoice)+'.xlsx',index = False)
3htmauhk

3htmauhk1#

使用pandas.DataFrame.groupby怎么样?

for _, g in df.groupby("Voucher ID"):
    filename = g.loc[g["Claimed"].eq("Yes"), "Invoice No."].iloc[0]
    g.to_excel(f"{filename}.xlsx", index=False)
  • 注意:文件名是用布尔索引计算的。*
iecba09b

iecba09b2#

使用.query()和列表组件时不会出现索引错误:

import pandas as pd

path = "path/to/file"
invoices = df.query("Claimed.eq('Yes')")["Invoice No."].tolist()
dfs = [x.reset_index(drop=True) for _, x in df.groupby("Voucher ID")]

[df.to_excel(f"{path}/{file_name}.xlsx", index=False) for file_name, df in dict(zip(invoices, dfs)).items()]

相关问题