Python 动态添加列和索引,并更新现有列
我需要创建一个数据帧,保存它并动态更新它<代码>时间戳应该是索引。我将在dict中时间戳的每分钟获得Python 动态添加列和索引,并更新现有列,python,pandas,dataframe,Python,Pandas,Dataframe,我需要创建一个数据帧,保存它并动态更新它时间戳应该是索引。我将在dict中时间戳的每分钟获得price和quantity作为列值。每次price都会改变。如果更改,我必须更新旧的qty值 数据帧的最终结果如下所示: timestamp 100 200 300 2020-11-01 12:00:00 4 3 5 下一分钟,我将在一个类似dict的列表中获得数据 [{'timestamp': '2020-11-01
price
和quantity
作为列值。每次price
都会改变。如果更改,我必须更新旧的qty
值
数据帧的最终结果如下所示:
timestamp 100 200 300
2020-11-01 12:00:00 4 3 5
下一分钟,我将在一个类似dict的列表中获得数据
[{'timestamp': '2020-11-01 12:01:00', 'price': 200, 'qty': 6},
{'timestamp': '2020-11-01 12:01:00', 'price': 400, 'qty': 3},
{'timestamp': '2020-11-01 12:01:00', 'price': 500, 'qty': 1}]
数据帧应按如下方式更新:
timestamp 100 200 300 400 500
2020-11-01 12:00:00 4 3 5 0 0
2020-11-01 12:01:00 4 9 5 3 1
timestamp 100 200 300 400 500
2020-11-01 12:00:00 4 3 5 0 0
2020-11-01 12:01:00 4 9 5 3 1
2020-11-01 12:02:00 4 15 0 3 2
数据帧应按如下方式更新:
timestamp 100 200 300 400 500
2020-11-01 12:00:00 4 3 5 0 0
2020-11-01 12:01:00 4 9 5 3 1
timestamp 100 200 300 400 500
2020-11-01 12:00:00 4 3 5 0 0
2020-11-01 12:01:00 4 9 5 3 1
2020-11-01 12:02:00 4 15 0 3 2
因此,如果在现有数据框架中添加了新的价格,那么基本上可以创建一个历史性的更改以及动态添加新列。我将每分钟以csv格式存储数据帧,并读取和更新新值
上述示例中dict中出现的新值;价格为200时,数量为上一个值和新值之和。此外,如果数量为-1,则该值应更新为0
非常感谢您的帮助。我已经为您的需求提供了一个小框架。如果有效,请应用
# Create two functions for creating and updating the data frames
def create_df():
return pd.DataFrame([[Dict_val[0]["timestamp"]]+[val["qty"] if val["qty"] !=-1 else 0 for val in Dict_val]],columns=[["timestamp"]+[val["price"] for val in Dict_val]])
def update_df(old_df):
df=(pd.concat([old_df,create_df()]).fillna(0,downcast='infer'))
df.iloc[-1,1:] += df.iloc[-2,1:]
return df
# Initial value to load in dataframe
Dict_val = [{'timestamp': '2020-11-01 12:00:00', 'price': 100, 'qty': 4},
{'timestamp': '2020-11-01 12:00:00', 'price': 200, 'qty': 3},
{'timestamp': '2020-11-01 12:00:00', 'price': 300, 'qty': 5}]
# Create a Initial DataFrame with the timestamp
df_1 = create_df()
print(df_1)
timestamp 100 200 300
0 2020-11-01 12:00:00 4 3 5
# Now assuming you have the updated Dict_val for the next minute
Dict_val = [{'timestamp': '2020-11-01 12:01:00', 'price': 200, 'qty': 6},
{'timestamp': '2020-11-01 12:01:00', 'price': 400, 'qty': 3},
{'timestamp': '2020-11-01 12:01:00', 'price': 500, 'qty': 1}]
# The below steps will be repeated every minute
# Update the dataframe with new values and save in save name
df_1 = update_df(df_1) # this line to be repeated at every minute with new Dict values
print(df_1)
timestamp 100 200 300 400 500
0 2020-11-01 12:00:00 4 3 5 0 0
0 2020-11-01 12:01:00 4 6 5 3 1
# Next minute run again the previous step
这部分是有效的,尽管在更新时,我希望它将新旧值相加,因此对于价格:200,总和为9。此外,如果返回的数量为-1,则必须将其中的值设置为0。这对总和有效,但如果在下一个值中,我将值200设置为-1,它仍然会额外返回9,如果添加相同的时间戳,正在创建重复的行。