簡體   English   中英

Pandas dataframe 根據與前一行的部分匹配修改條目

[英]Pandas dataframe amend entry based on partial match with previous row

我有一個像這樣的大 Dataframe ,其中 Item 是一列字符串:

Ref    Item
4      blue 14A square
16     blue 14A rectangle
19     red 15 oval
21     red 22C square
33     blue 101 square
38     blue 14A square
41     blue 6F square
42     blue 6F triangle
47     blue 6F circle
51     blue 95 oval
58     red 15 square
64     red 15 oval
71     blue 14A square

如果顏色和值與上一行相同,我想在顏色和值之后插入(copy) ,保留順序。

所需的 output:

Ref    Item
4      blue 14A square
16     blue 14A (copy) rectangle
19     red 15 oval
21     red 22C square
33     blue 101 square
38     blue 14A square
41     blue 6F square
42     blue 6F (copy) triangle
47     blue 6F (copy) circle
51     blue 95 oval
58     red 15 square
64     red 15 (copy) oval
71     blue 14A square

第二個最佳解決方案是(copy)到項目條目末尾的 go,例如參考 64 中的red 15 oval (copy)

我玩過groupby ,但我不想這樣分組 - 我只對匹配前一行感興趣。 我也嘗試過np.whereshift ,但我正在努力創建僅與 Item 的顏色和值部分匹配的東西。

您可以通過rsplit()assign()shift()方法嘗試:

df=df.assign(color=df['Item'].str.rsplit(' ',1).str[0],item=df['Item'].str.rsplit(' ',1).str[1])
#assigned 2 columns named color and item by splitting Item column 

shifted=df['color'].shift(1)

mask=df['color']==shifted
#created boolean mask

df[mask]=df[mask].assign(Item=df['color']+' (copy) '+df['item'])
#passed boolean mask

最后使用drop()方法:

df=df.drop(['color','item'],1)
#removed previously assigned columns

現在如果你打印df你會得到你想要的 output

暫無
暫無

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

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