鱼C论坛

 找回密码
 立即注册
查看: 1691|回复: 5

[已解决]向各位老师求助如何按照条件复制行和填充行?

[复制链接]
发表于 2022-6-20 18:35:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 caeser 于 2022-6-20 18:35 编辑

向各位老师求助:
我想实现这样一个目标,但不会用python编写:文件1-3是最后我想要的结果。
    有2个步骤:
    1、按照文件1-1的日期,把文件1-2对应日期的date列的值复制过来成为文件1-1的一个新的列data。如下图:
按日期复制.png
   
    2、复制过来后,对应日期如果是空值的话,把上一个日期的数据复制填充,比如2021/10/1-2021/10/7的值是空的,就把2021/9/30的值4550复制填充。其他的日期以此类推,如下图
按上一个日期把数字复制下来.png
最佳答案
2022-6-20 23:40:36
csv文件操作使用csv库。
可csv转excel实现更复杂的功能。

from openpyxl import load_workbook, Workbook
from openpyxl.styles import Font

def getValues(filename, sheet_name):
    wb = load_workbook(filename)
    wb.guess_types = True
    ws = wb.active
    ws = wb[sheet_name]

    rows = []
    nrows = ws.max_row
    ncols = ws.max_column
    
    for nrow in range(1, nrows+1):
        cell = ws[nrow]
        tmpList =[]
        for i in range(ncols):
            tmpList.append(cell[i].value)
        rows.append(tmpList)

    wb.close()

    return rows

def saveExcel(v1, v2, filename, sheet_name):    
    wb = Workbook()
    ws = wb.active
    ws.title = sheet_name
    
    ws.cell(1, 1, 'date')
    ws.cell(1, 2, 'price')
    ws.cell(1, 3, 'data')   

    i = 1
    c2 = ''
    for r1 in v1:
        if r1[0]=='date':
            continue        
        font = Font('宋体', size=11, bold=False, italic=False, strike=False, color='ff0000')
        for r2 in v2:
            if r2[0]=='date':
                continue        
            if r2[0]==r1[0]:
                c2 = r2[1]
                font = Font('宋体', size=11, bold=False, italic=False, strike=False, color='000000')
                break
            
        ws.cell(i+1, 1, r1[0])
        ws.cell(i+1, 2, r1[1])
        ws.cell(i+1, 3, c2).font=font
        i = i+1
    
    wb.save(filename)
    wb.close()


f1_1 = r'./analysis/1-1.xlsx'
f1_2 = r'./analysis/1-2.xlsx'

v1 = getValues(f1_1, '1-1')
v2 = getValues(f1_2, '1-2')

saveExcel(v1, v2, r'./analysis/new.xlsx', '1-3')

analysis.zip

767 Bytes, 下载次数: 2

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-20 23:40:36 | 显示全部楼层    本楼为最佳答案   
csv文件操作使用csv库。
可csv转excel实现更复杂的功能。

from openpyxl import load_workbook, Workbook
from openpyxl.styles import Font

def getValues(filename, sheet_name):
    wb = load_workbook(filename)
    wb.guess_types = True
    ws = wb.active
    ws = wb[sheet_name]

    rows = []
    nrows = ws.max_row
    ncols = ws.max_column
    
    for nrow in range(1, nrows+1):
        cell = ws[nrow]
        tmpList =[]
        for i in range(ncols):
            tmpList.append(cell[i].value)
        rows.append(tmpList)

    wb.close()

    return rows

def saveExcel(v1, v2, filename, sheet_name):    
    wb = Workbook()
    ws = wb.active
    ws.title = sheet_name
    
    ws.cell(1, 1, 'date')
    ws.cell(1, 2, 'price')
    ws.cell(1, 3, 'data')   

    i = 1
    c2 = ''
    for r1 in v1:
        if r1[0]=='date':
            continue        
        font = Font('宋体', size=11, bold=False, italic=False, strike=False, color='ff0000')
        for r2 in v2:
            if r2[0]=='date':
                continue        
            if r2[0]==r1[0]:
                c2 = r2[1]
                font = Font('宋体', size=11, bold=False, italic=False, strike=False, color='000000')
                break
            
        ws.cell(i+1, 1, r1[0])
        ws.cell(i+1, 2, r1[1])
        ws.cell(i+1, 3, c2).font=font
        i = i+1
    
    wb.save(filename)
    wb.close()


f1_1 = r'./analysis/1-1.xlsx'
f1_2 = r'./analysis/1-2.xlsx'

v1 = getValues(f1_1, '1-1')
v2 = getValues(f1_2, '1-2')

saveExcel(v1, v2, r'./analysis/new.xlsx', '1-3')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-21 20:07:52 | 显示全部楼层
ba21 发表于 2022-6-20 23:40
csv文件操作使用csv库。
可csv转excel实现更复杂的功能。

老师,有2个问题请教下,第一:输出的结果,时间列怎么是 “2021/9/24  0:00:00“ ?第二:能不能用csv来做啊,excel看不懂。我不需要红色的字体,我是用红色字体来显示填充的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-21 20:44:53 | 显示全部楼层
caeser 发表于 2022-6-21 20:07
老师,有2个问题请教下,第一:输出的结果,时间列怎么是 “2021/9/24  0:00:00“ ?第二:能不能用csv来 ...

该贴结贴,另发个悬赏贴,我来答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-25 11:17:17 | 显示全部楼层
ba21 发表于 2022-6-21 20:44
该贴结贴,另发个悬赏贴,我来答。

谢谢老师了,我找到了这个函数df_3 = pd.merge(df_one,df_two,how = 'left'),已经解决问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-25 12:13:46 | 显示全部楼层
caeser 发表于 2022-6-25 11:17
谢谢老师了,我找到了这个函数df_3 = pd.merge(df_one,df_two,how = 'left'),已经解决问题了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表