Формула приращения написана, чтобы преуспеть с Python

1

Сценарий ниже читает в нескольких файлах CSV, объединяет некоторые и записывает их в файл Excel на двух разных листах.

Он также добавляет эту формулу (=IF(COUNTIFS(Meds!A:A,B2)>0,1,0)) к последнему столбцу в каждой ячейке столбца Meds, но мне нужно =IF(COUNTIFS(Meds!A:A,B2)>0,1,0) его, поэтому вторая ячейка будет =IF(COUNTIFS(Meds!A:A,B3)>0,1,0) и так далее. Я не могу понять, как написать цикл, который будет делать это. Я видел этот пост, но у меня есть проблемы с использованием openpyxl, поэтому я хотел бы избежать этой библиотеки.

import pandas as pd

# read in multiple csv files 
df1 = pd.read_csv("file1.csv", encoding = 'utf-8')
df2 = pd.read_csv("file2.csv", encoding = 'utf-8')
meds = pd.read_csv("meds.csv", encoding = 'utf-8')

# create a list of dataframes (excluding meds)
dfs = [df1, df2]

# merge dataframes in list
df_final = reduce(lambda left,right: pd.merge(left,right,on='RecordKey'), dfs)

# add empty column
df_final["Meds"] = ""

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('final.xlsx', engine='xlsxwriter')

# add formula to Meds
df_final['Meds'] = '=IF(COUNTIFS(Sheet2!A:A,E2)>0,1,0)'

# write to csv
df_final.to_excel(writer, sheet_name='Combined')
meds.to_excel(writer, sheet_name='Meds')

# Close the Pandas Excel writer and output the Excel file.
writer.save()
Теги:
pandas
xlsxwriter

1 ответ

1
Лучший ответ

Вы можете использовать циклическое и строковое форматирование, чтобы создать список формул, которые можно вставить в ваш df.

length_of_df = len(df)
list_of_formulas = []

for i in range(2,length_of_df+2):
    formula = '=IF(COUNTIFS(Sheet2!A:A,E{0}>0,1,0)'.format(i)
    list_of_formulas.append(formula)

# print(list_of_formulas)

# ['=IF(COUNTIFS(Sheet2!A:A,E2>0,1,0)',
# '=IF(COUNTIFS(Sheet2!A:A,E3>0,1,0)',   
# '=IF(COUNTIFS(Sheet2!A:A,E4>0,1,0)',    
# '=IF(COUNTIFS(Sheet2!A:A,E5>0,1,0)', 
# '=IF(COUNTIFS(Sheet2!A:A,E6>0,1,0)']

# Assign list of formulas to df
df.loc[:, "Meds"] = list_of_formulas
  • 0
    Спасибо, это прекрасно работает. Теперь мне просто нужно пройтись по списку и добавить каждую формулу в соответствующую ячейку.
  • 0
    @ n8_ Насколько я понимаю, эти формулы станут одним столбцом в одном кадре данных, верно?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню