第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Pandas 數(shù)據(jù)框中查找 asc/desc 序列

在 Pandas 數(shù)據(jù)框中查找 asc/desc 序列

繁星淼淼 2022-10-06 19:29:08
我正在嘗試構(gòu)建一個有助于簡化研究工作的工具,并且似乎需要檢測我何時在一列中的數(shù)據(jù)中具有遞增序列,而在另一列中具有 asc/desc 序列。有沒有一種干凈的方法來檢查行中是否有序列,而不必編寫一個像https://stackoverflow.com/a/52679427/5045375這樣遍歷行的狀態(tài)機(jī)?編寫這樣的代碼片段必須檢查一列中的值是否在遞增(無間隙),而另一列中的值是否為 asc/desc(無間隙)。我完全能夠做到這一點(diǎn),我只是想知道我的熊貓工具箱中是否有我遺漏的東西。這里有一些例子來澄清我的意圖,import pandas as pd from collections import namedtupleQUERY_SEGMENT_ID_COLUMN = 'Query Segment Id'REFERENCE_SEGMENT_ID_COLUMN = 'Reference Segment Id'def dataframe(data):    columns = [QUERY_SEGMENT_ID_COLUMN, REFERENCE_SEGMENT_ID_COLUMN]    return pd.DataFrame(data, columns=columns)# No sequence in either column. No resultsdata_without_pattern = [[1, 2], [7, 0], [3, 6]]# Sequence in first column, but no sequence in second column. No resultsdata_with_pseodo_pattern_query = [[1, 2], [2, 0], [3, 6]]# Sequence in second column, but no sequence in first column. No resultsdata_with_pseudo_pattern_reference = [[1, 2], [7, 3], [3, 4]]# Broken sequence in first column, sequence in second column. No resultsdata_with_pseudo_pattern_query_broken = [[1, 2], [3, 3], [7, 4]]# Sequence occurs in both columns, asc. Expect resultsdata_with_pattern_asc = [[1, 2], [2, 3], [3, 4]]# Sequence occurs in both columns, desc. Expect resultsdata_with_pattern_desc = [[1, 4], [2, 3], [3, 2]]# There is a sequence, and some noise. Expect resultsdata_with_pattern_and_noise = [[1, 0], [1, 4], [1, 2], [1, 3], [2, 3], [3, 4]]在第一個示例中,沒有任何模式,print(dataframe(data_without_pattern))   Query Segment Id  Reference Segment Id0                 1                     21                 7                     02                 3                     6第二個示例在查詢列中有一個升序的 id 序列,但在參考列中沒有,print(dataframe(data_with_pseodo_pattern_query))   Query Segment Id  Reference Segment Id0                 1                     21                 2                     02                 3                     6
查看完整描述

1 回答

?
繁星點(diǎn)點(diǎn)滴滴

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個贊

如果我理解正確,您的問題是島和間隙問題的變體。每個具有可接受間隙的單調(diào)(增加或減少)子序列將形成一個島。例如,給定一個系列s:


s   island

--  ------

0   1

0   1

1   1

3   2        # gap > 1, form new island

4   2

2   3        # stop increasing, form new island

1   3 

0   3

概括地說:只要當(dāng)前行和前一行之間的差距超出 [-1, 1] 范圍,就會形成一個新島。


將此間隙島算法應(yīng)用于Query Segment Id和Reference Segment Id:


Query Segment Id  Q Island    Reference Segment Id  R Island    Q-R Intersection

----------------  --------    --------------------  --------    ----------------

1                 1           1                     1           (1, 1)

2                 1           2                     1           (1, 1)

3                 1           3                     1           (1, 1)

0                 2           4                     1           (2, 1)

1                 2           5                     1           (2, 1)

2                 2           6                     1           (2, 1)

3                 2           7                     1           (2, 1)

4                 2           8                     1           (2, 1)

0                 3           9                     1           (3, 1)

您正在尋找的qand范圍現(xiàn)在是每個 的開頭和結(jié)尾的and 。最后一個警告:忽略長度為 1 的交叉點(diǎn)(如最后一個交叉點(diǎn))。rQuery Segment IdReference Segment IdQ-R Intersection


代碼:


columns = ['Query Segment Id', 'Reference Segment Id']

df = pd.DataFrame(data_with_multiple_contiguous_sequences, columns=columns)


def get_island(col):

    return (~col.diff().between(-1,1)).cumsum()


df[['Q Island', 'R Island']] = df[['Query Segment Id', 'Reference Segment Id']].apply(get_island)


result = df.groupby(['Q Island', 'R Island']) \

            .agg(**{

                'Q Start': ('Query Segment Id', 'first'),

                'Q End': ('Query Segment Id', 'last'),

                'R Start': ('Reference Segment Id', 'first'),

                'R End': ('Reference Segment Id', 'last'),

                'Count': ('Query Segment Id', 'count')

            }) \

            .replace({'Count': 1}, {'Count': np.nan}) \

            .dropna()

result['Q'] = result[['Q Start', 'Q End']].apply(tuple, axis=1)

result['R'] = result[['R Start', 'R End']].apply(tuple, axis=1)

結(jié)果:


                   Q Start  Q End  R Start  R End  Count       Q       R

Q Island R Island                                                       

1        1               1      3        1      3      3  (1, 3)  (1, 3)

2        1               0      4        4      8      5  (0, 4)  (4, 8)


查看完整回答
反對 回復(fù) 2022-10-06
  • 1 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號