我正在尝试学习时间序列。我想查找与布尔值True
链接的日期。然后,我将布尔值分配给pd.DataFrame
。
我将布尔语句分配给名为50+
的列,如下所示:
如何对列True
中的50+
行进行排序?
我已经搜索了互联网,但没有找到解决方案。由于我将50+
从布尔值传递给了日期框架,难道这不使它成为可以通过排序值函数排序的普通字符串吗?
答案 0 :(得分:2)
您需要指定列名称:
>>> import pandas as pd
>>> import numpy as np
>>> np.random.seed(123)
>>> idx = pd.date_range('2018-10-05', periods=7, freq='D')
>>> df = pd.DataFrame({'data': np.random.randn(idx.size),
... '50+': np.random.choice([0, 1], size=idx.size).astype(bool)},
... index=idx)
>>> df
data 50+
2018-10-05 -1.085631 True
2018-10-06 0.997345 True
2018-10-07 0.282978 False
2018-10-08 -1.506295 False
2018-10-09 -0.578600 False
2018-10-10 1.651437 True
2018-10-11 -2.426679 False
>>> df.sort_values('50+')
data 50+
2018-10-07 0.282978 False
2018-10-08 -1.506295 False
2018-10-09 -0.578600 False
2018-10-11 -2.426679 False
2018-10-05 -1.085631 True
2018-10-06 0.997345 True
2018-10-10 1.651437 True
>>> df.sort_values('50+', ascending=False)
data 50+
2018-10-05 -1.085631 True
2018-10-06 0.997345 True
2018-10-10 1.651437 True
2018-10-07 0.282978 False
2018-10-08 -1.506295 False
2018-10-09 -0.578600 False
2018-10-11 -2.426679 False
如果您不确定,可以随时检查docstring。
默认值为ascending=True
,它将False
放在首位,因为它们只是底下的0。 (而True
为1时。)
如果您想过滤到该列为True的行,则可以使用:
>>> df[df['50+']]
data 50+
2018-10-05 -1.085631 True
2018-10-06 0.997345 True
2018-10-10 1.651437 True
答案 1 :(得分:0)
我想查找与以下布尔值链接的日期: 是的。
您无需为此进行任何排序。您只需要使用布尔索引即可;换句话说,构造一个长度与数据帧索引相同的布尔系列或数组,并通过__getitem__
来应用它,语法为[]
。
因此,而不是“将布尔值分配给pd.DataFrame
”,只需索引索引!
index_filtered = df.index[df['50+']]