如何使用一个数据框的日期和值并在另一个数据框中使用此条件进行搜索
how to use date and value of one dataframe and search with this conditions in another dataframe
我想根据日期在另一个数据框中搜索值(来自一个数据框)。
我有一个基于 1 分钟频率的 DatetimeIndex 数据框。
我将数据帧重新采样为 5 分钟和每天的频率。
这是代码和输出:
agg_dict = {'open': 'first','high': 'max','low': 'min','cls': 'last','vol': 'sum'}
data_5min = data_rth.resample('5min').agg(agg_dict).dropna().round(2).sort_index(ascending=False)
data_daily = data_rth.resample('D').agg(agg_dict).dropna().round(2).sort_index(ascending=False)
data_weekly= data_rth.resample('W').agg(agg_dict).dropna().round(2).sort_index(ascending=False)
data_monthly= data_rth.resample('M').agg(agg_dict).dropna().round(2).sort_index(ascending=False)
print('data_daily','\n',data_daily['high'].head())
print('data_5min','\n',data_5min['high'].head(24))
output:
data_daily
time
2021-08-05 441.85
2021-08-04 441.12
2021-08-03 441.28
2021-08-02 440.93
2021-07-30 440.06
Name: high, dtype: float64
data_5min
time
2021-08-05 16:00:00 441.85
2021-08-05 15:55:00 441.65
2021-08-05 15:50:00 441.39
2021-08-05 15:45:00 441.23
2021-08-05 15:40:00 441.24
2021-08-05 15:35:00 441.11
2021-08-05 15:30:00 440.90
2021-08-05 15:25:00 440.83
2021-08-05 15:20:00 440.78
2021-08-05 15:15:00 440.86
2021-08-05 15:10:00 440.94
2021-08-05 15:05:00 440.96
2021-08-05 15:00:00 440.89
2021-08-05 14:55:00 440.83
2021-08-05 14:50:00 440.87
2021-08-05 14:45:00 440.88
2021-08-05 14:40:00 440.96
2021-08-05 14:35:00 440.88
2021-08-05 14:30:00 440.86
2021-08-05 14:25:00 440.91
2021-08-05 14:20:00 440.96
2021-08-05 14:15:00 440.96
2021-08-05 14:10:00 440.98
2021-08-05 14:05:00 441.12
Name: high, dtype: float64
我现在想看看每天的最高点在 5 分钟帧中显示的位置。
我试过了
data_5min['high'].isin(data_daily['high'])
what gives me this output:
time
2021-08-05 16:00:00 True
2021-08-05 15:55:00 False
2021-08-05 15:50:00 False
2021-08-05 15:45:00 False
2021-08-05 15:40:00 False
2021-08-05 15:35:00 False
2021-08-05 15:30:00 False
2021-08-05 15:25:00 False
2021-08-05 15:20:00 False
2021-08-05 15:15:00 False
2021-08-05 15:10:00 False
2021-08-05 15:05:00 False
2021-08-05 15:00:00 False
2021-08-05 14:55:00 False
2021-08-05 14:50:00 False
2021-08-05 14:45:00 False
2021-08-05 14:40:00 False
2021-08-05 14:35:00 False
2021-08-05 14:30:00 False
2021-08-05 14:25:00 False
2021-08-05 14:20:00 False
2021-08-05 14:15:00 False
2021-08-05 14:10:00 False
2021-08-05 14:05:00 True
我不想要最后一行中的 True。这似乎是 data_daily 索引 2021-08-04 处的值。
我想要的是搜索 data_5min 中 data_daily 的每个值,但取决于日期。
我试过了
data_5min['high'].isin(data_daily['high']) & data_5min.index.isin(data_daily.index.date)
但我没有让它工作。
任何帮助都会很好。
为什么不直接找到 5 分钟系列的 max
?
# Create Dummy Data
d = {'col1': [1, 2, 2.5, 5, 0, np.nan]}
df = pd.DataFrame(data=d)
print(df)
col1
0 1.0
1 2.0
2 2.5
3 5.0
4 0.0
5 NaN
# Create new column checking if value is equal to max in Series
df['bool'] = df['col1'] == df['col1'].max()
print(df)
输出:
col1 bool
0 1.0 False
1 2.0 False
2 2.5 False
3 5.0 True
4 0.0 False
5 NaN False
如果有多天的数据,您已经有了重新采样的数据。您可以将它们合并到 5 分钟的 DataFrame 中,并检查值是否彼此相等。
您只能使用 data_5m
通过 groupby
和 DatetimeIndex
的 .date
部分找到每天的峰值:
>>> data_5min.groupby(data_5min.index.date)['high'].idxmax()
time
2021-08-05 2021-08-05 16:00:00
Freq: D, Name: high, dtype: datetime64[ns]
我想根据日期在另一个数据框中搜索值(来自一个数据框)。
我有一个基于 1 分钟频率的 DatetimeIndex 数据框。 我将数据帧重新采样为 5 分钟和每天的频率。 这是代码和输出:
agg_dict = {'open': 'first','high': 'max','low': 'min','cls': 'last','vol': 'sum'}
data_5min = data_rth.resample('5min').agg(agg_dict).dropna().round(2).sort_index(ascending=False)
data_daily = data_rth.resample('D').agg(agg_dict).dropna().round(2).sort_index(ascending=False)
data_weekly= data_rth.resample('W').agg(agg_dict).dropna().round(2).sort_index(ascending=False)
data_monthly= data_rth.resample('M').agg(agg_dict).dropna().round(2).sort_index(ascending=False)
print('data_daily','\n',data_daily['high'].head())
print('data_5min','\n',data_5min['high'].head(24))
output:
data_daily
time
2021-08-05 441.85
2021-08-04 441.12
2021-08-03 441.28
2021-08-02 440.93
2021-07-30 440.06
Name: high, dtype: float64
data_5min
time
2021-08-05 16:00:00 441.85
2021-08-05 15:55:00 441.65
2021-08-05 15:50:00 441.39
2021-08-05 15:45:00 441.23
2021-08-05 15:40:00 441.24
2021-08-05 15:35:00 441.11
2021-08-05 15:30:00 440.90
2021-08-05 15:25:00 440.83
2021-08-05 15:20:00 440.78
2021-08-05 15:15:00 440.86
2021-08-05 15:10:00 440.94
2021-08-05 15:05:00 440.96
2021-08-05 15:00:00 440.89
2021-08-05 14:55:00 440.83
2021-08-05 14:50:00 440.87
2021-08-05 14:45:00 440.88
2021-08-05 14:40:00 440.96
2021-08-05 14:35:00 440.88
2021-08-05 14:30:00 440.86
2021-08-05 14:25:00 440.91
2021-08-05 14:20:00 440.96
2021-08-05 14:15:00 440.96
2021-08-05 14:10:00 440.98
2021-08-05 14:05:00 441.12
Name: high, dtype: float64
我现在想看看每天的最高点在 5 分钟帧中显示的位置。 我试过了
data_5min['high'].isin(data_daily['high'])
what gives me this output:
time
2021-08-05 16:00:00 True
2021-08-05 15:55:00 False
2021-08-05 15:50:00 False
2021-08-05 15:45:00 False
2021-08-05 15:40:00 False
2021-08-05 15:35:00 False
2021-08-05 15:30:00 False
2021-08-05 15:25:00 False
2021-08-05 15:20:00 False
2021-08-05 15:15:00 False
2021-08-05 15:10:00 False
2021-08-05 15:05:00 False
2021-08-05 15:00:00 False
2021-08-05 14:55:00 False
2021-08-05 14:50:00 False
2021-08-05 14:45:00 False
2021-08-05 14:40:00 False
2021-08-05 14:35:00 False
2021-08-05 14:30:00 False
2021-08-05 14:25:00 False
2021-08-05 14:20:00 False
2021-08-05 14:15:00 False
2021-08-05 14:10:00 False
2021-08-05 14:05:00 True
我不想要最后一行中的 True。这似乎是 data_daily 索引 2021-08-04 处的值。 我想要的是搜索 data_5min 中 data_daily 的每个值,但取决于日期。 我试过了
data_5min['high'].isin(data_daily['high']) & data_5min.index.isin(data_daily.index.date)
但我没有让它工作。
任何帮助都会很好。
为什么不直接找到 5 分钟系列的 max
?
# Create Dummy Data
d = {'col1': [1, 2, 2.5, 5, 0, np.nan]}
df = pd.DataFrame(data=d)
print(df)
col1
0 1.0
1 2.0
2 2.5
3 5.0
4 0.0
5 NaN
# Create new column checking if value is equal to max in Series
df['bool'] = df['col1'] == df['col1'].max()
print(df)
输出:
col1 bool
0 1.0 False
1 2.0 False
2 2.5 False
3 5.0 True
4 0.0 False
5 NaN False
如果有多天的数据,您已经有了重新采样的数据。您可以将它们合并到 5 分钟的 DataFrame 中,并检查值是否彼此相等。
您只能使用 data_5m
通过 groupby
和 DatetimeIndex
的 .date
部分找到每天的峰值:
>>> data_5min.groupby(data_5min.index.date)['high'].idxmax()
time
2021-08-05 2021-08-05 16:00:00
Freq: D, Name: high, dtype: datetime64[ns]