簡體   English   中英

在Pandas DataFrame中對布爾值的列進行排序

[英]Sort column of booleans in Pandas DataFrame

我正在嘗試學習時間序列。 我想查找與True布爾值鏈接的日期。 然后,我將布爾值分配給pd.DataFrame

我將布爾語句分配給名為50+的列,如下所示:

我將布爾語句分配給列表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

如果不確定,可以隨時檢查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

我想查找與布爾值True鏈接的日期。

您無需為此進行任何排序。 您只需要使用布爾索引即可; 換句話說,構造一個長度與數據幀索引相同的布爾系列或數組,然后通過__getitem__應用它,該語法由語法[]調用。

因此, pd.DataFrame “將布爾值分配給pd.DataFrame ”, pd.DataFrame 對索引建立索引

index_filtered = df.index[df['50+']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM