当我运行此代码时:
df = pd.read_csv('example.txt', parse_dates = [["DATE", "TIME"]], index_col=0)
b930 = df.HIGH.at_time("09:30:00")
print b930
a=0
if (b930 > 3046.00).any():
a = 7
else:
a = 10
print a
这个csv:
DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOLUME
02/03/1997,09:30:00,3045.00,3045.00,3045.00,3045.00,28
02/04/1997,09:30:00,3077.00,3078.00,3077.00,3077.50,280
02/05/1997,09:30:00,3094.00,3094.50,3094.00,3094.00,50
02/06/1997,09:30:00,3106.00,3107.50,3106.00,3107.50,53
02/07/1997,09:30:00,3144.00,3144.00,3143.50,3143.50,15
02/06/1997,16:20:00,3126.50,3126.50,3126.00,3126.00,24
02/06/1997,16:21:00,3126.50,3128.00,3126.50,3128.00,169
02/06/1997,16:22:00,3128.00,3128.00,3126.00,3126.00,243
02/06/1997,16:23:00,3125.50,3126.50,3125.50,3125.50,26
我只得到5个不同行的一个答案。我如何得到每一行的答案。
我在互联网上看了一遍。 我尝试了几种不同的版本。
df['logic'] = np.where(df['AAA'] > 5,'high','low'); df
我已经尝试过所有这些.empty,a.bool(),a.item(),a.any()或a.all()。
我是否有可能接近或离开。
非常感谢,如果没有这个网站或者非常慷慨的程序员社区,我不知道会怎么做!
答案 0 :(得分:1)
' a'意思? 也许你想要
b930.map(lambda x: 7 if x>3046 else 10)
答案 1 :(得分:1)
df = pd.read_csv('example.txt')
df.set_index(pd.to_datetime(df.DATE + ' ' + df.TIME), inplace=True)
df.drop(['DATE', 'TIME'], axis=1, inplace=True)
>>> df
OPEN HIGH LOW CLOSE VOLUME
1997-02-03 09:30:00 3045.0 3045.0 3045.0 3045.0 28
1997-02-04 09:30:00 3077.0 3078.0 3077.0 3077.5 280
1997-02-05 09:30:00 3094.0 3094.5 3094.0 3094.0 50
1997-02-06 09:30:00 3106.0 3107.5 3106.0 3107.5 53
1997-02-07 09:30:00 3144.0 3144.0 3143.5 3143.5 15
1997-02-06 16:20:00 3126.5 3126.5 3126.0 3126.0 24
1997-02-06 16:21:00 3126.5 3128.0 3126.5 3128.0 169
1997-02-06 16:22:00 3128.0 3128.0 3126.0 3126.0 243
1997-02-06 16:23:00 3125.5 3126.5 3125.5 3125.5 26
>>> df.HIGH.at_time('9:30')
1997-02-03 09:30:00 3045.0
1997-02-04 09:30:00 3078.0
1997-02-05 09:30:00 3094.5
1997-02-06 09:30:00 3107.5
1997-02-07 09:30:00 3144.0
Name: HIGH, dtype: float64
a = 7 if (df.HIGH.at_time('09:30') > 3046).any() else 10
>>> a
7
我讨厌map
,但它可以解决这个问题:
>>> h.map(lambda x: 7 if x > 3046 else 10)
1997-02-03 09:30:00 10
1997-02-04 09:30:00 7
1997-02-05 09:30:00 7
1997-02-06 09:30:00 7
1997-02-07 09:30:00 7
Name: HIGH, dtype: int64
这是一个可怕的黑客,但应该是有效的:
true_val = 7
false_val = 10
>>> (df.HIGH.at_time('09:30') > 3046) * (false_val - true_val) + true_val
1997-02-03 09:30:00 7
1997-02-04 09:30:00 10
1997-02-05 09:30:00 10
1997-02-06 09:30:00 10
1997-02-07 09:30:00 10
Name: HIGH, dtype: int64
这会让你回到一个numpy数组:
>>> np.where(df.HIGH.at_time("09:30:00") > 3046, 7, 10)
array([10, 7, 7, 7, 7])
或者你可以使用列表理解:
>>> [7 if val > 3046 else 10 for val in df.HIGH.at_time("09:30:00")]
[10, 7, 7, 7, 7]