簡體   English   中英

如何為 pandas dataframe 中的重復列值序列分配唯一 ID?

[英]How to assign a unique id for a sequence of repeated column value in pandas dataframe?

我有一個 dataframe 叫它 dfA,

ID   Chronological   Label         
1    1               None         
2    0               ONPEAPLFPH   
3    0               JFECJGSQNS   
4    1               None         
5    1               None         
6    0               MGMELTIVTJ    
7    1               None         
8    1               None         
9    1               None         

我想為Chronological列分配一個unique_id ,這樣每個后續的重復值都有一個“常見的” unique_id 那就是我想要下面想要的output,

ID   Chronological   Label         unique_id 
1    1               None          1
2    0               ONPEAPLFPH    2
3    0               JFECJGSQNS    3
4    1               None          4
5    1               None          4
6    0               MGMELTIVTJ    5 
7    1               None          6
8    1               None          6
9    1               None          6

我嘗試使用 for-loop 使用非矢量化解決方案,但它真的很慢,

starting_index = 0
unique_id = 1
dfs = []
for cL in dfA['Label'].unique():
    if cL != "None":
        current_index = dfA[dfA['Label']==cL].index.values[0]
        sliced_df = dfA.iloc[starting_index:current_index+1, :]
        sliced_df_ = sliced_df.copy()
        if len(sliced_df_)>=1:
            sliced_df_['unique_id'] = unique_id
            starting_index = current_index
            unique_id += 1
            dfs.append(sliced_df_)
df_concat = pd.concat(dfs, axis=0)

有沒有更有效的方法來解決它?

嘗試這個:

df['unique_id'] = (df['Chronological'].eq(0) | 
                   (df['Chronological'] != df['Chronological'].shift())
                  ).cumsum()

Output:

   ID  Chronological       Label  unique_id
0   1              1        None          1
1   2              0  ONPEAPLFPH          2
2   3              0  JFECJGSQNS          3
3   4              1        None          4
4   5              1        None          4
5   6              0  MGMELTIVTJ          5
6   7              1        None          6
7   8              1        None          6
8   9              1        None          6

暫無
暫無

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

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