簡體   English   中英

在 pandas dataframe 中按列值索引添加不同的前綴

[英]Add different prefix to index by column value in pandas dataframe

我有一個 dataframe,帶有重復索引,我正在嘗試根據另一個 dataframe 的行名重新索引。但是,由於重復索引問題,它告訴我當我執行df2 = df2.reindex(df.index)cannot reindex on an axis with duplicate labels df2 = df2.reindex(df.index)

下面是我的 df2 的樣子

指數 專欄 1 專欄2
一種 樣本_a 1個
樣本_a 3個
樣品_b 2個
C 樣品_c 3個

所以我想通過 column1 中的值向它添加前綴來使我的索引唯一。 如果column1是sample_a,我想把index做成a_index; 如果 column1 是 sample_b,我想將索引更改為 b_index,如下所示更改我的 df2:

指數 專欄 1 專欄2
a_A 樣本_a 1個
a_B 樣本_a 3個
b_B 樣品_b 2個
c_C 樣品_c 3個

我確實看到了向索引添加前綴的方法,但我不確定如何有選擇地添加不同的前綴?

謝謝!

如果你的另一個 DataFrame 也有“索引”和“column1”,為什么不將兩者都用作索引呢?

或者,您可以使用str.extract刪除重復的“索引”以從下划線之后的“column1”獲取 id:

df['index'] = (df['column1']
                 .str.extract('_([^_]+)$', expand=False)
                 .add('_'+df['index'])
              )

更新 dataframe:

  index   column1  column2
0   a_A  sample_a        1
1   a_B  sample_a        3
2   b_B  sample_b        2
3   c_C  sample_c        3

正則表達式:

_        # match underscore
([^_]+)  # capture non-underscore characters
$        # match end of line

正則表達式演示

你可以使用str.slice

df2['index'] = df2['column1'].str.slice(-1) + "_" + df2['index']

Output:

  index   column1  column2
0   a_A  sample_a        1
1   a_B  sample_a        3
2   b_B  sample_b        2
3   c_C  sample_c        3

暫無
暫無

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

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