有沒有方法可以測試數據框是否按照非索引的給定列進行排序(即,對於非索引列,是否存在與is_monotonic()的等效值)而不調用再次重新排序,並且不將列轉換爲索引?檢查是否在Pandas中排序的非索引列
回答
pd.algos
有一些功能可能有用。他們都是無證實現細節,所以他們可能從發行版本而變化:
>>> pd.algos.is[TAB]
pd.algos.is_lexsorted pd.algos.is_monotonic_float64 pd.algos.is_monotonic_object
pd.algos.is_monotonic_bool pd.algos.is_monotonic_int32
pd.algos.is_monotonic_float32 pd.algos.is_monotonic_int64
的is_monotonic_*
函數採用指定的D型和「類時」布爾應該是False
大多數用例的陣列。 (Pandas將它設置爲True
,涉及時間表示爲整數的情況。)返回值是一個元組,其第一個元素表示數組是單調不遞減的,第二個元素表示數組是單調不遞增的。其他元組元素是版本相關:
>>> df = pd.DataFrame({"A": [1,2,2], "B": [2,3,1]})
>>> pd.algos.is_monotonic_int64(df.A.values, False)[0]
True
>>> pd.algos.is_monotonic_int64(df.B.values, False)[0]
False
所有這些功能假定一個特定的輸入D型細胞,甚至is_lexsorted
,其中假定輸入是int64
陣列的列表。它傳遞了錯誤的D型,它變得非常困惑:
In [32]: pandas.algos.is_lexsorted([np.array([-2, -1], dtype=np.int64)])
Out[32]: True
In [33]: pandas.algos.is_lexsorted([np.array([-2, -1], dtype=float)])
Out[33]: False
In [34]: pandas.algos.is_lexsorted([np.array([-1, -2, 0], dtype=float)])
Out[34]: True
我不完全知道爲什麼系列還沒有某種短路is_sorted
。可能有些東西會使它比看起來更復雜。
可以使用numpy的方法:
import numpy as np
def is_df_sorted(df, colname):
return (np.diff(df[colname]) > 0).all()
更直接的方式(如你的建議,但你說你不希望它..)被轉換成一個索引,使用is_monotonic
屬性:
import pandas as pd
def is_df_sorted(df, colname):
return pd.Index(df[colname]).is_monotonic
謝謝shx2!這符合我的目標,但事實證明: assert(df.column.diff()[1:] <= 0).all()
(diff的第一個值是NaN)比僅用mergesort進行排序要慢。另外,is_monotonic()不能容忍弱單調列,所以在我的情況下不起作用。 :/但也許在一個更大的數據集比較會收益。 –
2015-02-09 22:04:18
也許使用'> = 0'? – DSM 2015-02-09 22:05:44
我正在排序降序,所以我可以搶第一項... – 2015-02-09 22:08:31
- 1. 檢查表列上是否存在非聚簇索引
- 2. 檢查是否連續排序列表
- 3. 在pandas的多索引級別內按列排序
- 4. 在列表中的所有索引處檢查是否相等
- 5. 檢查當前頁面是否是索引中的索引
- 6. 檢查ArrayList是否排序
- 7. 檢查索引是否是最新的?
- 8. 檢查數組索引是否存在
- 9. 檢查索引文件是否存在
- 10. 排序後檢索索引值Enum按字母順序排列
- 11. 返回在pandas中跳過nan值的排序索引?
- 12. 在索引列上排序
- 13. 如何檢查索引是否包含SQLite中的特定列
- 14. 檢查元素是否在序列中
- 15. 在非聚集索引中,第二,第三,第四...列是如何排序的?
- 16. 將pandas DataFrame按多列和重複索引排序
- 17. Python Pandas按多重索引和列排序
- 18. 如何檢查Checkedlistbox2的索引是否檢查了Checkedlistbox1的索引
- 19. 排序列上的索引
- 20. 檢查Elasticsearch是否已完成索引
- 21. Haskell:非詳盡模式 - 檢查列表是否正在升序
- 22. mongodb索引查找索引排序
- 23. 重新排列Array中的字母並檢查排列是否在數組中
- 24. 檢查索引中是否存在文檔的條件(Lucene.NET)
- 25. 檢查數據是否出現在NSMutableArray中的索引處
- 26. 如何動態檢查數組中的索引是否存在?
- 27. 檢查索引是否在二維數組中的OutOfBounds
- 28. 檢索查詢列排
- 29. 檢查一個數組是否排序
- 30. 排序「索引」陣列
這兩個驚人的指向我這個pd.algos庫,並提示!任何你知道任何簡單的方法來處理降序排序的機會?我想要它排序,所以我可以拉第一(最大)行。我可以調用len()並根據需要獲取最後一行,只是尋找速度。 – 2015-02-09 22:15:37
@nick_eu:不是,我很害怕。儘管如此,你總是可以使用'.iloc [-1]'獲取最後一行。當然是 – DSM 2015-02-09 22:23:15
!沒有想到這一點。謝謝! – 2015-02-09 22:28:18