我有一個這樣的資料框:
df = pd.DataFrame({
'idA': [11,25,11,45,11,25,35],
'idB': [30,40,45,20,30,40,90]
})
我想創建一個新列,包括每行關于idA和idB的唯一值。換句話說,每當一對出現在任何其他地方時,該值應該完全相同。但任何其他對 - 包括相反的一對 - 必須不同。為了克服這個問題,我想應用一個這樣的數學函式:
df['NewValue'] = df.min(axis=1)*(df['idA']*10 15*df['idB'])
# idA idB NewValue
# 11 30 6160
# 25 40 21250
# 11 45 8635
# 45 20 15000
# 11 30 6160
# 25 40 21250
# 35 90 59500
它似乎作業。但是按照這個,NewValue 可以取任何數字。我希望有一個簡單的遞增整數。對于這個例子:
NewValue = [1,2,3,4,1,2,5]
實際上,我有數千行。所以我也在尋求一個有效的解決方案。有什么辦法處理這個嗎?
uj5u.com熱心網友回復:
IIUC,您可以使用groupby ngroup:
df['NewValue'] = df.groupby(['idA','idB'], sort=False).ngroup().add(1)
輸出:
idA idB NewValue
0 11 30 1
1 25 40 2
2 11 45 3
3 45 20 4
4 11 30 1
5 25 40 2
6 35 90 5
uj5u.com熱心網友回復:
這是另一種使用方式pd.factorize()
(pd.factorize(df.to_records(index=False))[0] 1).tolist()
輸出:
[1, 2, 3, 4, 1, 2, 5]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/433546.html
