Python 数据帧中布尔值的排序列

Python 数据帧中布尔值的排序列,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我正在尝试学习时间序列。我想查找与布尔值链接的日期,该布尔值为True。然后我将布尔值分配给pd.DataFrame 我将布尔语句分配给名为50+的列,如下所示: 如何对列50+中的True行进行排序 我在网上搜索过,没有找到解决办法。由于我将50+从一个布尔值传递到日期框,这不是使它成为一个可以通过排序值函数排序的普通字符串吗?您需要指定列名: >>> import pandas as pd >>> import numpy as np >>&

我正在尝试学习时间序列。我想查找与布尔值链接的日期,该布尔值为
True
。然后我将布尔值分配给
pd.DataFrame

我将布尔语句分配给名为
50+
的列,如下所示:

如何对列
50+
中的
True
行进行排序


我在网上搜索过,没有找到解决办法。由于我将
50+
从一个布尔值传递到日期框,这不是使它成为一个可以通过排序值函数排序的普通字符串吗?

您需要指定列名:

>>> 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
如果你不确定,你可以随时检查

默认值为
ascending=True
,这将把
False
s放在第一位,因为它们只是0。(而
True
为1。)

如果要筛选到此列为真的行,可以使用:

>>> df[df['50+']]
                data   50+
2018-10-05 -1.085631  True
2018-10-06  0.997345  True
2018-10-10  1.651437  True
我想查找与布尔值链接的日期,该布尔值为 对

你不需要为此排序任何东西。您只需要使用布尔索引;换句话说,构造一个与数据帧索引长度相同的布尔序列或数组,并通过
\uuu getitem\uuu
应用它,由语法
[]
调用

因此,与其“将布尔值分配给
pd.DataFrame
”,不如为索引编制索引


您是否尝试过使用dataframe的
.sort\u values()
方法,就像您建议的那样?它起作用了吗?不,我不能让它起作用。我试过了。sort_values('True')、sort_index('True)等等。我完全搞不懂。我说的x=df['50+']x.sort_values('True')导致sort_值的语法错误吗?你试过
df.sort_values(['50+',])吗
?允许使用列名。这真是个聪明人。谢谢你花时间回复!这将改变我的游戏规则。@user10193731,没问题,别忘了点击答案左侧的勾号来帮助我。
index_filtered = df.index[df['50+']]