我的数据框很大。它包含列“ Date”,“ Time”,“ Ticker”,“ Open”,“ High”,“ Low”,“ Close”。
编辑。我添加了2天的示例
Date Time Ticker Open High Low Close
0 01/02/18 2:15 PM USD/JPY 112.315 112.325 112.250 112.270
1 01/02/18 2:45 PM USD/JPY 112.270 112.290 112.260 112.275
2 01/02/18 3:15 PM USD/JPY 112.265 112.280 112.245 112.255
3 01/02/18 3:45 PM USD/JPY 112.265 112.295 112.265 112.275
4 01/02/18 4:15 PM USD/JPY 112.265 112.360 112.265 112.360
5 01/02/18 4:45 PM USD/JPY 112.310 112.310 112.280 112.290
6 01/02/18 5:15 PM USD/JPY 112.270 112.280 112.230 112.230
7 01/02/18 5:45 PM USD/JPY 112.225 112.230 112.180 112.180
8 01/02/18 6:15 PM USD/JPY 112.210 112.280 112.210 112.225
9 01/02/18 6:45 PM USD/JPY 112.245 112.360 112.245 112.330
10 01/02/18 7:15 PM USD/JPY 112.330 112.355 112.290 112.290
11 01/02/18 7:45 PM USD/JPY 112.290 112.345 112.270 112.340
12 01/02/18 8:15 PM USD/JPY 112.340 112.340 112.310 112.340
13 01/03/18 2:15 PM USD/JPY 112.510 112.540 112.460 112.480
14 01/03/18 2:45 PM USD/JPY 112.480 112.480 112.420 112.440
15 01/03/18 3:15 PM USD/JPY 112.440 112.490 112.440 112.480
16 01/03/18 3:45 PM USD/JPY 112.485 112.525 112.485 112.515
17 01/03/18 4:15 PM USD/JPY 112.515 112.520 112.470 112.490
18 01/03/18 4:45 PM USD/JPY 112.520 112.565 112.520 112.540
19 01/03/18 5:15 PM USD/JPY 112.540 112.560 112.540 112.560
20 01/03/18 5:45 PM USD/JPY 112.560 112.625 112.555 112.615
21 01/03/18 6:15 PM USD/JPY 112.610 112.700 112.600 112.675
22 01/03/18 6:45 PM USD/JPY 112.675 112.725 112.660 112.710
23 01/03/18 7:15 PM USD/JPY 112.710 112.730 112.670 112.700
24 01/03/18 7:45 PM USD/JPY 112.700 112.780 112.695 112.765
18年1月25日8:15 USD / JPY 112.765 112.765 112.700 112.710
我首先要做的是在每个日期的“高”列中找到最高(.idmax)值。
编辑,需要2天的输出时间
#High grouped by Date
data = data.loc[data.groupby('Date')['High'].idxmax()]
Date Time Ticker Open High Low Close
4 01/02/18 4:15 PM USD/JPY 112.265 112.360 112.265 112.360
24 01/03/18 7:45 PM USD/JPY 112.700 112.780 112.695 112.765
下一步是我被绊倒的地方。我想在数据帧的末尾添加一列“ Open”,例如“ Time” == 2:15。创建新的数据框时,我有一些代码可以找到该值。
#New dataframe just for 2:15 pricing
df2 = data.loc[data['Time']=='2:15 PM']
Date Time Ticker Open High Low Close
0 01/02/18 2:15 PM USD/JPY 112.315 112.325 112.250 112.270
13 01/03/18 2:15 PM USD/JPY 112.510 112.540 112.460 112.480
我尝试使用.merge函数。
#trying to merge data and df2
frames = [data, df2]
result = pd.merge(data, df2, on='Date', how='outer')
result.dropna(how='all')
它添加到我的数据框中,但作为单独的行。
我也尝试了concat函数,但没有成功。
result = pd.concat((frames), axis = 1)
理想情况下,我将有以下几列:
“日期”,“时间”,“股票行情”,“打开”,“高”,“低”,“关闭”-我可以通过数据数据框获得。
但是首先,我想在'Time'=='2:15'时从数据帧的末尾添加'Open'值
编辑..
这将是所需的输出 打印(结果)
Date Time Ticker Open High Low Close 2:15 price
4 01/02/18 4:15 PM USD/JPY 112.265 112.360 112.265 112.360 112.315
24 01/03/18 7:45 PM USD/JPY 112.700 112.780 112.695 112.765 112.510
答案 0 :(得分:0)
您能再介绍一下吗?例如,在“打开”列中,如果时间!= 2:15 pm,您希望将其列出为什么?
通常,您可以执行以下操作:
df['Open'] = df['Time'].apply(lambda x: 'Yes' if x == '2:15 PM' else 'No')
答案 1 :(得分:0)
选择14.15 p处的所有元素,然后将它们合并为单独的行。
price_df = data.loc[data['Time'] == '2:15 PM', ['Date', 'Open']].rename(columns={'Open': 'value_at1415'})
with_cols_df = data.merge(price_df, on='Date', how='left')
您还可以在日期到生成的集之间使用映射,其中索引设置为日期。我相信以下代码可以做到这一点,尽管我尚未对其进行测试。
df['value_at1415'] = data['Date'].map(data[data['Time'] == '2:15 PM'].set_index('Date')['Open'])