无法在特定时间从数据框熊猫获取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在特定时间从数据框熊猫获取值相关的知识,希望对你有一定的参考价值。

我具有以下功能:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import csv
from datetime import datetime, timedelta
def AvgPrice (file,min1):
    headers = ['ticker', 'size', 'price', 'unix','type','time']
    dtypes = {'ticker': 'str', 'size': 'float', 'price': 'float', 'unix': 'float','type': 'str','time': 'str'}
    parse_dates = ['time']
    btcnow = pd.read_csv(file, header=None, names=headers, dtype=dtypes, parse_dates=parse_dates)
    now3 = pd.DataFrame(btcnow, columns=['size','time','price'])
    for i in range (1,11) :
        time_interval = timedelta(minutes = min1)
        df = now3.loc[now3['size']==i, ['size','time','price']]

        # extract time size for merge
        df_time_size=df.loc[:, ['time', 'size']].copy()
        df_time_size.loc[:, 'time'] = df_time_size.loc[:, 'time'] + time_interval

        # inner join dataframe by size&time
        df = df_time_size.merge(df[['time', 'size', 'price']], how = 'inner')
        df['orig_time'] = df['time'] - time_interval
        df['price_orig']=df.loc[[df['time']- time_interval],'price']
        #gets the last price at the time
        df=df.groupby('time').last().reset_index()
  return df

代码now3数据帧如下:

size                time   price
0           4.0 2019-11-03 02:42:00  9288.5
1           4.0 2019-11-03 02:42:00  9288.5
2           4.0 2019-11-03 02:42:00  9288.5
3           4.0 2019-11-03 02:42:00  9288.5
4           4.0 2019-11-03 02:42:00  9288.5
...         ...                 ...     ...
1048570    15.0 2019-11-05 05:48:00  9331.0
1048571  3851.0 2019-11-05 05:48:00  9331.0
1048572  3793.0 2019-11-05 05:48:00  9331.0
1048573  1000.0 2019-11-05 05:48:00  9331.0
1048574   200.0 2019-11-05 05:48:00  9331.0

我正在尝试在5分钟内获得每种尺寸1-11的时间和价格,以及原始价格(5分钟前)。我在此行出现错误:df['price_orig']=df.loc[[df['time']- time_interval],'price']我不确定5分钟前如何记录价格。

答案
您可以尝试这个,

for row in df.itertuples(): vals = df.loc[df.time == row.orig_time, 'price'].values if len(vals) > 0: df.loc[row.Index, 'orig_price'] = vals[0]

而不是,

df['price_orig'] = df.loc[[df['time'] - time_interval], 'price']

以上是关于无法在特定时间从数据框熊猫获取值的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框中提取在特定列中具有特定值的所有行

如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?

从过滤的熊猫数据框中获取整数索引值

如何使用正则表达式从熊猫数据框中的一行中的字符串中提取所有特定值?

无法在熊猫数据框中按时间戳索引

删除熊猫数据框中包含特定值的列和行[重复]