得到df如下輸入資料框:
Flow Side Row
Banana Front Row 1
PP Banana Front Row 1
Peach Front Row 1
Red Grape Right End Row 1
Kp Mango Back Row 1
PP Kp Mango Back Row 1
Tomato Left End Row 1
Cucum Front Row 2
PP Cucum Front Row 2
Bunch Right End Row 2
Capsicum Back Row 2
Romo Left End Row 2
場景:
如果df['Flow'].str.contains('PP') && df['Side']=='Front',則該特定行需要作為最后一行移動到Back相同 Row 值的Side ' '。如流 ' PP Banana' 和 ' PP Cucum' 的示例。
注意- 不應更改其他流順序。此外,對于“ ”列中的每個 Row 值,列“ Side”的順序應始終為Front、Right End、Back、Left EndRow。
預期輸出:
Flow Side Row
Banana Front Row 1
Peach Front Row 1
Red Grape Right End Row 1
Kp Mango Back Row 1
PP Kp Mango Back Row 1
PP Banana Back Row 1
Tomato Left End Row 1
Cucum Front Row 2
Bunch Right End Row 2
Capsicum Back Row 2
PP Cucum Back Row 2
Romo Left End Row 2
任何幫助將不勝感激!
uj5u.com熱心網友回復:
您可以使用掩碼提取需要移動的行和尾隨(“左端”)行,然后使用再次加入concat并重新排序每個組。
m1 = df['Flow'].str.contains('PP') & df['Side'].eq('Front')
m2 = df['Side'].eq('Left End')
mask = m1|m2
out = (pd.concat([df[~mask], df[mask].replace({'Side': {'Front': 'Back'}})])
.sort_values(by='Row')
)
或者,如果您不想在最后對組進行排序并獨立處理它們,您可以使用自定義函式:
def move(d):
m1 = d['Flow'].str.contains('PP') & d['Side'].eq('Front')
m2 = d['Side'].eq('Left End')
mask = m1|m2
return pd.concat([d[~mask], d[mask].replace({'Side': {'Front': 'Back'}})])
out = df.groupby('Row', group_keys=False).apply(move)
輸出:
Flow Side Row
0 Banana Front Row 1
2 Peach Front Row 1
3 Red Grape Right End Row 1
4 Kp Mango Back Row 1
5 PP Kp Mango Back Row 1
1 PP Banana Back Row 1
6 Tomato Left End Row 1
7 Cucum Front Row 2
9 Bunch Right End Row 2
10 Capsicum Back Row 2
8 PP Cucum Back Row 2
11 Romo Left End Row 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409487.html
標籤:
上一篇:如何根據規則比較資料框列文本?
