根据条件获取pandas multiindex中的索引值
Posted
技术标签:
【中文标题】根据条件获取pandas multiindex中的索引值【英文标题】:Getting index value in pandas multiindex based on condition 【发布时间】:2021-10-12 18:49:04 【问题描述】:我使用以下代码创建了一个数据框: 这样做的目的是找到每周低点并获得每周低点发生的日期。 为此:
import pandas as pd
from pandas_datareader import data as web
import pandas_datareader
import datetime
df = web.DataReader('GOOG', 'yahoo', start, end)
df2 = web.DataReader('GOOG', 'yahoo', start, end)
start = datetime.datetime(2021,1,1)
end = datetime.datetime.today()
df['Date1'] = df.index
df['month'] = df.index.month
df['week'] = df.index.week
df['day'] = df.index.day
df.set_index('week',append=True,inplace=True)
df.set_index('day',append=True,inplace=True)
要获得每周最低价:
df['Low'].groupby(['week']).min().tail(50)
我试图找出出现每周低点的日期:例如 1735.420044
如果我尝试这样做:
df['Low'].isin([1735.420044])
我明白了:
Date week day
2020-12-31 53 31 False
2021-01-04 1 4 False
2021-01-05 1 5 False
2021-01-06 1 6 False
2021-01-07 1 7 False
...
2021-08-02 31 2 False
2021-08-03 31 3 False
2021-08-04 31 4 False
2021-08-05 31 5 False
2021-08-06 31 6 False
Name: Low, Length: 151, dtype: bool
我怎样才能得到低点的实际日期?
【问题讨论】:
使用df['Low'].idxmin()
- 这将返回最小值标签的索引。
我正在尝试获取每周低点的日期。这就是为什么我对它进行多重索引以获得每周的价值。
你总是可以按周分组,然后使用 idxmin
这能回答你的问题吗? Get lowest value after groupby - Pandas
【参考方案1】:
要获得每周低点,您只需访问该指数即可。
res = df['Low'].groupby(['week']).min()
res
是指数中包含日期的最低价格系列。您可以使用 res.index.values
访问表示索引的原始 numpy 数组。这将包括week
和day
级别。
要获取一系列日期,这应该可以:
dates = res.index.get_level_values("Date").to_series()
PS:来自cmets的澄清
df['Low'].isin([1735.420044]).any() # returns False
上述内容对您不起作用(如果匹配,则应返回True
)因为当您说.isin([<bunch of floats>])
时,您实际上是在比较浮点数是否相等。这不起作用,因为浮点比较永远不能保证是准确的,它们总是必须在公差范围内(这不是 Python 特定的,适用于所有语言)。有时它似乎可以在 Python 中工作,但这完全是巧合,是底层内存优化的结果。查看this thread 以获得一些(特定于 Python 的)对此的了解。
【讨论】:
我最初尝试过,但这只是给了我一个空数据框 @Slartibartfast 那么你没有匹配,你可以用df['Low'].isin([1735.420044]).any()
检查。如果返回 False
,则没有匹配项,可能是因为您正在尝试比较浮点数。浮点数的精确比较是不可预测的,不推荐使用。
它返回 False
但是当我们可以在数据框中看到它时怎么可能呢?
您无法与浮点数进行精确比较,
所以我不能做这样的事情吗? df.where(df['Low'].groupby(['week']).min())
以上是关于根据条件获取pandas multiindex中的索引值的主要内容,如果未能解决你的问题,请参考以下文章
在 Multiindex Pandas 系列中获取每个组中最大的
根据列值对带有 MultiIndex 的 pandas DataFrame 进行排序