[英]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.where
與shift
,但我正在努力創建僅與 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.