如何将Pandas计算的CUMSUM结果分别存入Excel不同单元格?
问题:将CUMSUM计算结果存入Excel指定单元格
首先,先回顾你的原代码和它的运行输出:
原Python代码
import pandas as pd datas1 = [{'A':10, 'B':100}, {'A':11,'B':-210}, {'A':12,'B':120}, {'A':14, 'B':30}] datas2 = [{'A':25, 'B':90}, {'A':11,'B':-50}, {'A':110,'B':(-15)}, {'A':5, 'B':65}] datas3 = [{'A':5, 'B':-100}, {'A':19,'B':210}, {'A':12,'B':-300}, {'A':14, 'B':30}] for i in [datas1, datas2, datas3]: df = pd.DataFrame(i) df['CUMSUM'] = (df['B'].cumsum()) if (df['CUMSUM'] < -100).any(): print(df.loc[df['CUMSUM'] < -100, :].head(1)) print ("") else: print(df.loc[df['CUMSUM'] >= -100, :].tail(1)) print ("")
原运行输出
A B CUMSUM
1 11 -210 -110A B CUMSUM
3 5 65 90A B CUMSUM
2 12 -300 -190
你的需求
如何将上述输出中的每个CUMSUM结果分别存入Excel工作表的不同单元格?例如将-110存入A1单元格,90存入A2单元格,-190存入A3单元格,以此类推。
解决方案:用pandas收集结果并写入Excel
因为你已经在使用pandas处理数据,直接用pandas的ExcelWriter来实现会非常顺畅,只需要在原代码中添加结果收集和写入的逻辑即可。修改后的代码如下:
import pandas as pd datas1 = [{'A':10, 'B':100}, {'A':11,'B':-210}, {'A':12,'B':120}, {'A':14, 'B':30}] datas2 = [{'A':25, 'B':90}, {'A':11,'B':-50}, {'A':110,'B':(-15)}, {'A':5, 'B':65}] datas3 = [{'A':5, 'B':-100}, {'A':19,'B':210}, {'A':12,'B':-300}, {'A':14, 'B':30}] # 初始化列表,用来存储每次得到的目标CUMSUM值 cumsum_results = [] for i in [datas1, datas2, datas3]: df = pd.DataFrame(i) df['CUMSUM'] = df['B'].cumsum() if (df['CUMSUM'] < -100).any(): # 提取第一个符合条件的CUMSUM值 target_cumsum = df.loc[df['CUMSUM'] < -100, 'CUMSUM'].iloc[0] cumsum_results.append(target_cumsum) # 保留原打印逻辑(如果不需要可以删掉) print(df.loc[df['CUMSUM'] < -100, :].head(1)) print("") else: # 提取最后一个符合条件的CUMSUM值 target_cumsum = df.loc[df['CUMSUM'] >= -100, 'CUMSUM'].iloc[-1] cumsum_results.append(target_cumsum) # 保留原打印逻辑(如果不需要可以删掉) print(df.loc[df['CUMSUM'] >= -100, :].tail(1)) print("") # 将结果转换为DataFrame,索引从1开始对应Excel行号 result_df = pd.DataFrame(cumsum_results, columns=['CUMSUM'], index=range(1, len(cumsum_results)+1)) # 写入Excel文件,指定从A1开始写入,不包含表头 with pd.ExcelWriter('cumsum_results.xlsx') as writer: result_df.to_excel(writer, sheet_name='Sheet1', startrow=0, startcol=0, header=False) print("CUMSUM结果已成功写入Excel的A1、A2、A3单元格!")
关键逻辑说明
- 收集结果:创建
cumsum_results列表,在每次循环中提取我们需要的CUMSUM值并添加进去; - 转换为DataFrame:设置索引从1开始,这样写入Excel时,第一条结果对应A1,第二条对应A2,以此类推;
- 写入Excel:使用
ExcelWriter打开文件,通过header=False去掉表头,startrow=0, startcol=0确保从A1单元格开始写入。
运行这段代码后,你会得到一个名为cumsum_results.xlsx的文件,其中A1单元格是-110,A2是90,A3是-190,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Dan_99
相关产品推荐
相关产品推荐

