对 Pandas DataFrame 中的布尔值列进行排序

use*_*731 5 python indexing dataframe pandas

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

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

我将布尔语句分配给列表 50+

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

我已经在网上搜索过,但没有找到解决方案。由于我将50+布尔值传递给日期帧,这是否使其成为可以通过排序值函数排序的普通字符串?

Bra*_*mon 7

您需要指定列名称:

>>> 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
Run Code Online (Sandbox Code Playgroud)

如果您不确定,您可以随时检查docstring

默认值为ascending=True,这会将Falses 放在第一位,因为它们实际上只是 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
Run Code Online (Sandbox Code Playgroud)