【发布时间】:2017-07-17 06:56:01
【问题描述】:
我有一个时间序列pandas.DataFrame,'ES_Summary_Index1',如下:
Ticker_x Date Close_x 15M_Long 1H_Long Net_Long
0 ES H7 2016-10-18 13:44:59 2128.00 N NaN
1 ES H7 2016-10-18 13:59:59 2128.75 N NaN
2 ES H7 2016-10-18 14:14:59 2125.75 N NaN
3 ES H7 2016-10-18 14:29:59 2126.50 N N
4 ES H7 2016-10-18 14:44:59 2126.50 N NaN
5 ES H7 2016-10-18 16:14:59 2126.00 N NaN
6 ES H7 2016-10-18 16:44:59 2126.25 N NaN
7 ES H7 2016-10-18 17:59:59 2126.50 N NaN
8 ES H7 2016-10-18 18:14:59 2127.00 N NaN
9 ES H7 2016-10-18 19:14:59 2127.75 N NaN
10 ES H7 2016-10-18 19:44:59 2127.75 N NaN
11 ES H7 2016-10-18 19:59:59 2127.75 N NaN
12 ES H7 2016-10-18 20:44:59 2129.00 N NaN
13 ES H7 2016-10-18 21:29:59 2128.75 N N
14 ES H7 2016-10-18 21:44:59 2129.00 N NaN
关注15M_Long 和1H_Long 列,如果两者都说“Y”,我希望Net_Long 列也说Long。如果只有一个或都不说“Y”,那么我希望 Net_Long 列保持空白或说“N”(无论哪个)。
首先,我将 Net_Long 列设置为空白:
ES_Summary_Index1['Net_Long'] = ''
接下来,我正在编写一个 for 循环语句来填充 Net_Long 列:
for index, row in ES_Summary_Index1.iterrows():
if ES_Summary_Index1.loc[index, '15M_Long'] is 'Y' & ES_Summary_Index1.loc[index, '1H_Long'] is 'Y':
ES_Summary_Index1.loc['Net_Long'] = 'Long'
else:
ES_Summary_Index1.loc['Net_Long'] = 'N'
很遗憾,我收到以下错误:
TypeError: unsupported operand type(s) for &: 'str' and 'float'
...参考上面的 if 语句(if ES_Summary_Index1...)。我已经尝试从& 更改为and,但这并没有像我想要的那样填充Net_Long 列。我也尝试过 == 而不是 is ,但这不起作用。有人可以帮忙吗?
【问题讨论】:
-
iterrows解决方案很慢,请用numpy.where查看另一个解决方案
标签: python pandas dataframe time-series