向各位老师求助如何按照条件复制行和填充行?
本帖最后由 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复制填充。其他的日期以此类推,如下图
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')
ba21 发表于 2022-6-20 23:40
csv文件操作使用csv库。
可csv转excel实现更复杂的功能。
老师,有2个问题请教下,第一:输出的结果,时间列怎么是 “2021/9/240:00:00“ ?第二:能不能用csv来做啊,excel看不懂{:5_104:}。我不需要红色的字体,我是用红色字体来显示填充的值。 caeser 发表于 2022-6-21 20:07
老师,有2个问题请教下,第一:输出的结果,时间列怎么是 “2021/9/240:00:00“ ?第二:能不能用csv来 ...
该贴结贴,另发个悬赏贴,我来答。 ba21 发表于 2022-6-21 20:44
该贴结贴,另发个悬赏贴,我来答。
谢谢老师了,我找到了这个函数df_3 = pd.merge(df_one,df_two,how = 'left'),已经解决问题了 caeser 发表于 2022-6-25 11:17
谢谢老师了,我找到了这个函数df_3 = pd.merge(df_one,df_two,how = 'left'),已经解决问题了
{:5_106:}
页:
[1]