分组拆分数据框,并将其保存到现有的excel文件中,而不会删除数据。

问题描述 投票:0回答:1

我有一个DataFrame,是这样的,我在下面的代码中创建了下面的df。

enter image description here

我有三个excel文件(名称:- 1C1,1M1,1V1),现在我想通过DataFrame列'Source'来分割组,并将数据保存在新的'Sheet2'中,而不删除'Sheet1'中的现有数据。

enter image description here

import glob
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd
df=pd.DataFrame()
for f in glob.glob(r'...\Excel\1*.xlsx'):
    info=pd.read_excel(f)
    df=df.append(info)

for filename in glob.glob(r'...\Excel\1*.xlsx'):
    print(filename)
    book=load_workbook(filename)
    writer=pd.ExcelWriter(filename,engine='openpyxl')
    writer.book=book
    df.to_excel(writer,sheet_name='Sheet2')
    writer.save()
    writer.close()

我已经写好了代码,但它是把整个DataFrame(所有三行)写入三个excel文件中。

如何将DataFrame写入并拆分组并保存在各个文件中。

python pandas pandas-groupby openpyxl
1个回答
0
投票

当你使用pandas groupby 你会得到一个结果组的集合。 所以,我会。

  • 实现 groupby 方法来制作你的组。
  • 在集合上迭代。 请注意,当你对集合进行迭代时,你会得到一个组nameecriteria的元组结果和一个包含分组结果的新的数据框架。
  • 为每个文件打开一个新的文件名,使用组名作为文件或工作表名称的一部分。
  • 写组

我把这个问题单独写了一篇文章,以展示如何从一个单独的组中剥离出 groupby 操作。 你可以把它作为一个框架来使用。

In [28]: df = pd.DataFrame({'filename': ['a', 'a', 'a', 'b', 'b'], 
    ...:                     'value': [2.5, 3, 4.0, 1.1, 2.2]} 
    ...:                     )                                                  

In [29]: df                                                                     
Out[29]: 
  filename  value
0        a    2.5
1        a    3.0
2        a    4.0
3        b    1.1
4        b    2.2

In [30]: groups = df.groupby(['filename'])                                      

In [31]: for f_name, group in groups: 
    ...:     print(f'name of group: {f_name}') 
    ...:     print(group['value']) 
    ...:     print(max(group['value'])) 
    ...:     print() 
    ...:      
    ...:                                                                        
name of group: a
0    2.5
1    3.0
2    4.0
Name: value, dtype: float64
4.0

name of group: b
3    1.1
4    2.2
Name: value, dtype: float64
2.2

0
投票

谢谢,我知道Groupby是如何工作的,但我很困惑在哪里和如何在我的上述代码中添加groupby功能,使它不会覆盖现有的数据,并与新的sheet(sheet2)存储在各自的文件中。

© www.soinside.com 2019 - 2024. All rights reserved.