根据“如果”逻辑将列添加到末尾

时间:2019-08-15 16:33:14

标签: python pandas dataframe

我的数据框很大。它包含列“ 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

2 个答案:

答案 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'])