无法从列(周)中提取单个值,但单个值有效。
u = eurusd.loc[eurusd['Local time'] == pd.to_datetime("2014-01-08 03:00:00",format="%Y-%m-%d %H:%M:%S")].Close
print(u)
输出:
70275 1.36075
Name: Close, dtype: float64
但是当我尝试这个时:
u = eurusd.loc[eurusd['Local time'] == pd.to_datetime(eurusd['Week'],format="%Y-%m-%d %H:%M:%S")].Close
print(u)
输出:
Series([], Name: Close, dtype: float64)
我也尝试用apply方法做同样的任务,但它似乎只是逐行比较列,而不是迭代的
eurusd['ResultClose'] = eurusd.apply(lambda eurusd: eurusd if eurusd['Local time'] == "2014-01-08 03:00:00" else np.nan,axis=1)
要仔细检查代码:
eurusd.isnull().sum()
输出(显示列中没有插入值):
Local time 0
Close 0
ResultClose 8760
dtype: int64
下表给出了我试图实现的目标。
初始表
当地时间 | 关闭 | 周 |
---|---|---|
2014-01-01 00:00:00 | 1.37410 | 2014-01-08 00:00:00 |
2014-01-01 01:00:00 | 1.37410 | 2014-01-08 01:00:00 |
2014-01-01 02:00:00 | 1.37410 | 2014-01-08 02:00:0 |
2014-01-08 03:00:00 | 1.36075 | 2014-03-08 02:00:0 |
决赛桌
当地时间 | 关闭 | 周 | 结果关闭 |
---|---|---|---|
2014-01-01 00:00:00 | 1.37410 | 2014-01-08 00:00:00 | 1.36075 |
2014-01-01 01:00:00 | 1.37410 | 2014-01-08 01:00:00 | . |
2014-01-01 02:00:00 | 1.37410 | 2014-01-08 02:00:00 | . |
2014-01-08 03:00:00 | 1.36075 | 2014-03-08 02:00:0 | . |
答案 0 :(得分:1)
首先使用 to_datetime()
方法将 'Local time' 和 'Week' 转换为 datetime dtype:
eurusd['Local time']=pd.to_datetime(eurusd['Local time'])
eurusd['Week']=pd.to_datetime(eurusd['Week'])
现在使用布尔掩码和 between()
方法:
mask=eurusd['Local time'].between(eurusd.loc[0,'Week'],eurusd.loc[len(eurusd)-1,'Week'])
value=eurusd.loc[mask,'Close'].reset_index(drop=True)
最后使用assign()
方法:
eurusd=eurusd.assign(ResultClose=value)
现在,如果您打印 eurusd
,您将获得所需的输出:
Local time Close Week ResultClose
0 2014-01-01 00:00:00 1.37410 2014-01-08 00:00:00 1.36075
1 2014-01-01 01:00:00 1.37410 2014-01-08 01:00:00 NaN
2 2014-01-01 02:00:00 1.37410 2014-01-08 02:00:00 NaN
3 2014-01-08 03:00:00 1.36075 2014-03-08 02:00:00 NaN