【问题标题】:Conditional test within pandas dataframe熊猫数据框中的条件测试
【发布时间】:2013-10-14 07:15:20
【问题描述】:

有人可以帮我解决熊猫问题吗?我有一个时间序列数据框,例如:

                       GOOG     AAPL
2010-12-09 16:00:00    591.50   551
2010-12-10 16:00:00    592.21   523
2010-12-13 16:00:00    594.62   578
2010-12-14 16:00:00    594.91   567
2010-12-15 16:00:00    590.30   577
...

我需要遍历每个时间戳并测试 AAPL 是否 > 570。如果是,那么我想为该条目打印 AAPL 的日期和价格。这可能吗?

【问题讨论】:

  • 我过去只使用过一次 pandas,但如果我没记错的话,它是建立在 numpy 之上的,所以你可以使用 my_dataframe.where(my_dataframe[:,2]>570)

标签: python pandas


【解决方案1】:

不需要任何循环,pandas 基于numpy 构建的主要好处之一是它可以轻松地对整个列进行操作。很简单:

df['AAPL'][df['AAPL'] > 570]

输出:

2010-12-13  16:00:00    578
2010-12-15  16:00:00    577
Name: AAPL, dtype: int64

【讨论】:

  • 这比df.loc[df['AAPL']>570,'AAPL'] 更简洁(如果你做作业,你必须这样做
  • 另外,如果只想输出月日和价格呢?
  • @AlexLee:如果您遇到问题,最好按照“从日期时间索引中提取月份和日期”的方式提出一个新问题,并提供一些易于重现的数据. Stack Overflow 最适用于解决单个问题的独立问题。
【解决方案2】:

啊哈,我明白了:

既然它是建立在 numpy 之上的,那么你可以这样做:

my_dataframe[my_dataframe.AAPL > 570]

你几乎完成了。 从这里你有所有对应于 AAPL > 570 的行,现在它只是打印出你需要的值:

valid_rows = my_dataframe[my_dataframe.AAPL > 570]
for row in valid_rows.to_records():
    print row[1],row[2]

dataframe.where 可用于搜索整个帧。 我忘记了 pandas 让引用列变得非常容易。

【讨论】:

  • 我确信可能有更好的方法来做到这一点,但这是我脑海中的记忆。
  • 另外,我稍微修改了瑞恩的代码for row in my_dataframe[my_dataframe.AAPL > 1].to_records(): print row[0],row[2]
猜你喜欢
  • 2019-02-15
  • 2019-12-21
  • 2019-06-21
  • 2016-12-11
  • 2017-11-20
  • 2017-08-21
  • 2022-01-25
  • 1970-01-01
  • 2017-05-08
相关资源
最近更新 更多