Python 动态添加列和索引,并更新现有列

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

我需要创建一个数据帧,保存它并动态更新它<代码>时间戳应该是索引。我将在dict中时间戳的每分钟获得
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,如果添加相同的时间戳,正在创建重复的行。