![](/img/trans.png)
[英]How to assign a unique ID to detect repeated rows in a pandas dataframe?
[英]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.