caeser 发表于 2022-6-20 18:35:11

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

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

向各位老师求助:
我想实现这样一个目标,但不会用python编写:文件1-3是最后我想要的结果。
    有2个步骤:
    1、按照文件1-1的日期,把文件1-2对应日期的date列的值复制过来成为文件1-1的一个新的列data。如下图:

   
    2、复制过来后,对应日期如果是空值的话,把上一个日期的数据复制填充,比如2021/10/1-2021/10/7的值是空的,就把2021/9/30的值4550复制填充。其他的日期以此类推,如下图

ba21 发表于 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

    rows = []
    nrows = ws.max_row
    ncols = ws.max_column
   
    for nrow in range(1, nrows+1):
      cell = ws
      tmpList =[]
      for i in range(ncols):
            tmpList.append(cell.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=='date':
            continue      
      font = Font('宋体', size=11, bold=False, italic=False, strike=False, color='ff0000')
      for r2 in v2:
            if r2=='date':
                continue      
            if r2==r1:
                c2 = r2
                font = Font('宋体', size=11, bold=False, italic=False, strike=False, color='000000')
                break
            
      ws.cell(i+1, 1, r1)
      ws.cell(i+1, 2, r1)
      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')

caeser 发表于 2022-6-21 20:07:52

ba21 发表于 2022-6-20 23:40
csv文件操作使用csv库。
可csv转excel实现更复杂的功能。

老师,有2个问题请教下,第一:输出的结果,时间列怎么是 “2021/9/240:00:00“ ?第二:能不能用csv来做啊,excel看不懂{:5_104:}。我不需要红色的字体,我是用红色字体来显示填充的值。

ba21 发表于 2022-6-21 20:44:53

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

该贴结贴,另发个悬赏贴,我来答。

caeser 发表于 2022-6-25 11:17:17

ba21 发表于 2022-6-21 20:44
该贴结贴,另发个悬赏贴,我来答。

谢谢老师了,我找到了这个函数df_3 = pd.merge(df_one,df_two,how = 'left'),已经解决问题了

ba21 发表于 2022-6-25 12:13:46

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

{:5_106:}
页: [1]
查看完整版本: 向各位老师求助如何按照条件复制行和填充行?