几次手术数据框groupby()

2024-03-28 08:14:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用外汇数据集,试图用开放、高、低、收盘的每一个刻度来填充我的数据框。你知道吗

这是我的密码:

import pandas as pd

# pandas settings
pd.set_option('display.max_columns', 320)
pd.set_option('display.max_rows', 320)
pd.set_option('display.width', 320)

# creating dataframe
df = pd.read_csv('https://www.dropbox.com/s/tcek3kmleklgxm5/eur_usd_lastweek.csv?dl=1', names=['timestamp', 'ask', 'bid', 'avol', 'bvol'], parse_dates=[0], header=0)
df['spread'] = df.ask - df.bid
df['symbol'] = 'EURUSD'
times = pd.DatetimeIndex(df.timestamp)

# parameters for df.groupby()
df['date'] = times.date
df['hour'] = times.hour

# 1h candles updated every tick
df['candle_number'] = '...'
df['1h_open'] = '...'
df['1h_high'] = '...'
df['1h_low'] = '...'
df['1h_close'] = '...'

# print(df)

grouped = df.groupby(['date', 'hour'])

for idx, x in enumerate(grouped):
    print(idx)
    print(x)



如你所见,使用for循环,我得到了组。你知道吗

现在我想在我的数据帧中填充以下列:

  • idxbe mydf['蜡烛号码']
  • df['1h\u open']必须等于第一个df.投标在组中
  • df['1h\u high']=最大值df.投标直到当前行(例如,如果组中有350行,则为第20个值) 我们从0-20区间数到最大值,在第215个数值上我们计算 0-215范围内的最大值可能完全不同。你知道吗
  • df['1h\u low']=当前迭代之前的最低值(与上述方法相同)

我希望它不会太混乱() 干杯


Tags: csv数据pandasdffordatedisplaymax
1条回答
网友
1楼 · 发布于 2024-03-28 08:14:31

重新编制日期和时间索引很方便:

df_new = df.set_index(['date', 'hour'])

然后应用groupby函数按索引聚合:

df_new['candle_number'] = df_new.groupby(level=[0,1]).ngroup()
df_new['1h_open'] = df_new.groupby(level=[0,1])['bid'].first()
df_new['1h_high'] = df_new.groupby(level=[0,1])['bid'].cummax()
df_new['1h_low']  = df_new.groupby(level=[0,1])['bid'].cummin()

您可以reset_index()返回到平面数据帧。你知道吗

相关问题 更多 >