如何使用此条件获得每一行的每个答案
Posted
技术标签:
【中文标题】如何使用此条件获得每一行的每个答案【英文标题】:How do I get each answer for each row with this conditional 【发布时间】:2016-08-12 11:08:27 【问题描述】:当我运行这段代码时:
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()。
有没有可能我离得很近或刚刚离开。
非常感谢,如果没有这个网站或非常慷慨的程序员社区,我不知道该怎么办!
【问题讨论】:
【参考方案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
这是一个糟糕的 hack,但应该很有效:
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]
【讨论】:
【参考方案2】:'a' 是什么意思? 也许你想要
b930.map(lambda x: 7 if x>3046 else 10)
【讨论】:
'a' 是我认为我必须做的事情来定义一个值为 true 和 false 我可能是错误的 idk。 @PhilChang 我想应该是b930.map
,即没有HIGH
,因为b930
是一个没有列名的系列。以上是关于如何使用此条件获得每一行的每个答案的主要内容,如果未能解决你的问题,请参考以下文章