如何使用此条件获得每一行的每个答案

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是一个没有列名的系列。

以上是关于如何使用此条件获得每一行的每个答案的主要内容,如果未能解决你的问题,请参考以下文章

如何获得具有指定 where 条件的所有多对一行?

如何使用 CSS 为 jQuery 表中的每一行设置不同的图像

如何使用 pytesseract 获得每一行的信心

如何获得二维数组中每一列和每一行的总和?

如何在vscode中的每一行上获得光标

如何获得 N 个皇后验证器的更好时间复杂度