Невозможно получить значение в определенное время из панд данных - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть следующая функция:

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

Я пытаюсь получить время и цену для каждого размера 1-11 за 5 минут, а также первоначальная цена (5 минут назад). Я получаю сообщение об ошибке в строке: df['price_orig']=df.loc[[df['time']- time_interval],'price'] Я не уверен, как получить цену 5 минут назад.

1 Ответ

0 голосов
/ 11 ноября 2019

Вы можете попробовать это,

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...