簡體   English   中英

給定一個數據框,如何檢查列的值按遞增順序排列而沒有任何丟失的數字?

[英]How can I check, given a data frame that the values of a column are in increasing order without any missing number?

我有一個具有如下值的數據框:

Number 
1
2
3
4
5
6
7
8
9
10
12
13
14
15
16
18
20
21
22

通過使用 pandas 的 sorted 函數,我的值正在增加,但我想檢查並發現是否有任何缺失值,在這種情況下,報告連續值集的開始和結束。例如,在這種情況下,它應該返回 [1,10],[12,16],[20,22]。 我想在這里卡住例如 18 即使它在那里但它不是連續的。 關於如何解決這個問題的任何線索?

您可以通過比較不等於1與累積總和的差異進行聚合,並獲得最小值和最大值,刪除具有相同最小值和最大值的行,如此處18並最后轉換為嵌套列表:

df1 = df.groupby(df['Number'].diff().ne(1).cumsum())['Number'].agg(['min','max'])
print (df1)
        min  max
Number          
1         1   10
2        12   16
3        18   18
4        20   22


df1 = df1[df1['min'].ne(df1['max'])]
print (df1)
        min  max
Number          
1         1   10
2        12   16
4        20   22


out = [list(x) for x in df1.to_numpy()]
print (out)
[[1, 10], [12, 16], [20, 22]]

您可以首先識別具有連續值的組,然后取這些組的第一個和最后一個值。 然后刪除那些只包含一個值(如18 )的組並轉換為列表:

g = df.Number.diff().fillna(1).ne(1).cumsum()
out = df.groupby(g).nth((0,-1))
out[out.index.duplicated(False)].groupby(level=0).agg(list).Number.tolist()
# [[1, 10], [12, 16], [20, 22]]

   

暫無
暫無

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

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