首页 > 解决方案 > 有条件地在数据框中创建新列

问题描述

更新的问题

通过使用下面的代码,我只能在完成 for 循环后访问数据帧,但我想在中间时间使用数据帧的最新创建列。即每5分钟后,无论是数据框的最后一列,如何实现这一点?

@app.route("/sortbymax")
def sortbymax():
    df = updated_data()
    #### here i want to use most recently created column
    df = create_links(df)
    df = df.sort_values(by=['perc_change'], ascending=False)
    return render_template('sortbymax.html',tables=[df.to_html(escape = False)], titles=df.columns.values)


def read_data():
    filename = r'c:\Users\91956\Desktop\bk.xlsm'
    df = pd.read_excel(filename)    
    return df


def updated_data():
    df = read_data()
    for i in range(288): 
        temp = read_data()
        x=datetime.datetime.now().strftime("%H:%M:%S")
        df['perc_change_'+x] = temp['perc_change']
        time.sleep(300)
    return df

标签: pythonpandas

解决方案


我看到您有一个 .xlsm 文件,这意味着启用了宏的 excel。我想您可以阅读它,但是如果您想用 python 更改它,那么您很可能会丢失 excel 中的宏部分。

对于 python 部分:这将每 5 分钟复制一次 perc_change 列,并带有相应的名称。但是请记住,这只会工作一天(之后它将替换现有的列)。如果您想工作更长的时间,请告诉我,以便我在列名中添加日-月-年(无论您想要什么)。

import datetime
import time

def read_data():
    filename = r'c:\Users\91956\Desktop\bk.xlsm'
    df = pd.read_excel(filename)    
    return df

def write_data(df):
    filename = r'c:\Users\91956\Desktop\bk.xlsm'
    df.to_excel(filename)    
    
df = read_data() #read excel for first time

for i in range(288): #this will run for one day exactly
    temp = read_data()
    x=datetime.datetime.now().strftime("%H:%M")
    df['perc_change_'+x] = temp['perc_change']
    time.sleep(300)

推荐阅读