三行代码  ›  专栏  ›  技术社区  ›  The Great

拆分并存储数据帧,但名称基于特定列中的唯一值

  •  0
  • The Great  · 技术社区  · 1 月前

    我有一个如下的数据帧

    data = pd.DataFrame({'email_id': ['abc@gmail.com;test1@gmail.com','abc@gmail.com;def@yahoo.com','abdc@gmail.com','ache@gmail.com','aqce@gmail.com','pqr@gmail.com','pqr@gmail.com'],
                 'Dept_id': [21,23,25,26,28,29,31],
                 'dept_name':['Science','Chemistry','Maths','Social','Physics','Botany','Zoology'],
                 'location':['KOR','ASN','ANZ','IND','AUS','NZ','NZ']})
    

    我想做以下事情

    a) 基于唯一性拆分数据帧 email_id 电子邮件id

    b) 将分割数据存储在excel文件中。每个email\u id行将有一个文件。

    c) 根据中存在的相应唯一值命名excel文件 dept_id dept_name location

    for k, v in data.groupby(['email_id']):
        dept_unique_ids = v['Dept_id'].unique()
        dept_unique_names = v['dept_name'].unique()
        location_unique = v['location'].unique()
        writer = pd.ExcelWriter(f"{k}.xlsx", engine='xlsxwriter')
        v.to_excel(writer,columns=col_list,sheet_name=f'{k}',index=False, startrow = 1)
    

    电子邮件id 它被用作键。相反,我想根据 , 地方

    email_id = pqr@gmail.com ,它们有两个唯一的dept\u ID,分别为29和31,其唯一的Depth\u名称为 Botany and Zoology 独特的位置是 NZ .

    29_31_Botany_Zoology_NZ.xlsx

    因此,我希望我的输出文件(每个唯一的电子邮件id行都有如下文件名)

    enter image description here

    更新-错误消息

    enter image description here

    1 回复  |  直到 1 月前
        1
  •  1
  •   Corralien    1 月前

    IIUC,您可以使用:

    for k, v in data.groupby(['email_id']):
        dept_unique_ids = '_'.join(v['Dept_id'].astype(str).unique())
        dept_unique_names = '_'.join(v['dept_name'].unique())
        location_unique = '_'.join(v['location'].unique())
        filename = '_'.join([dept_unique_ids, dept_unique_names, location_unique])
        print(filename)
    
        # Use a context manager
        with pd.ExcelWriter(f"{filename}.xlsx", engine='xlsxwriter') as writer:
            v.to_excel(writer,columns=col_list,sheet_name=f'{k}',index=False, startrow=1)
    

    输出:

    23_Chemistry_ASN
    21_Science_KOR
    25_Maths_ANZ
    26_Social_IND
    28_Physics_AUS
    29_31_Botany_Zoology_NZ