python - 根据列值拆分数据框并导出到不同的 Excel 工作表

标签 python excel python-3.x pandas

询问之前使用的来源:

Pandas: Iterate through a list of DataFrames and export each to excel sheets

Splitting dataframe into multiple dataframes

我已经成功做到了这一切:

# sort the dataframe
df.sort(columns=['name'], inplace=True)
# set the index to be this and don't drop
df.set_index(keys=['name'], drop=False,inplace=True)
# get a list of names
names=df['name'].unique().tolist()
# now we can perform a lookup on a 'view' of the dataframe
joe = df.loc[df.name=='joe']
# now you can query all 'joes'

我已经成功地完成了这项工作 - joe = df.loc[df.name=='joe'] 它给出了我正在寻找的确切结果。

作为使其适用于大量数据的解决方案,我发现了这个潜在的解决方案。

writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
List = [Data , ByBrand]
for i in List:
        i.to_excel(writer, sheet_name= i)
writer.save()

目前我有:

teacher_names = ['Teacher A', 'Teacher B', 'Teacher C']

df=

              ID   Teacher_name      Student_name
Teacher_name                                                         
Teacher A     1.0  Teacher A         Student 1 
Teacher A     NaN  Teacher A         Student 2  
Teacher B     0.0  Teacher B         Student 3 
Teacher C     2.0  Teacher C         Student 4 

如果我使用 - test = df.loc[df.Teacher_name=='Teacher A'] - 将收到准确的结果。

问题:如何优化它会自动将“测试”结果保存到(针对每个教师单独的)excel 文件(.to_excel(writer,sheet_name=Teacher_name )带有教师姓名,并且会对数据库中现有的所有教师执行此操作吗?

最佳答案

这应该适合你。您已经快到了,您只需要迭代 names 列表并每次过滤您的数据帧。

names = df['name'].unique().tolist()

writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter')

for myname in names:
    mydf = df.loc[df.name==myname]
    mydf.to_excel(writer, sheet_name=myname)

writer.save()

关于python - 根据列值拆分数据框并导出到不同的 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49408744/

相关文章:

python - 每次调用时创建 python 类的新副本

php - 使用php将mysql数据导出到excel时,所有字段都显示在一列中

python - 如何从 Python 运行 Excel VBA/宏

python - 在 Python 3 中将字符添加到字符串的多个位置

python - Pandas :将列值更改超过一定数量

python - 关于postgresql绑定(bind)变量的问题

python - 使用 numpy 计算投影和重构误差的函数 - python

不同工作表中的 VBA vlookup 引用

python - 当我使用数据集,连接后,dataset.map仅作用于原始数据

c++ - 使用 boost::python 从 C++ 创建 python collections.namedtuple