下面建議的問題不能解決我的問題,因為我想根據規則添加排序。建議的問題不回答這個問題。問題不是重復的。我有一個 DataFrame,我需要添加一個帶有每個值的訂單號的“新列”。我能夠做到這一點,但我想知道:1-有沒有更正確/優雅的方式來做到這一點?另外,是否有可能:2-以相同的順序給出等效的數字?例如,在我的情況下,第二行和第三行具有相同的值,是否可以為它們分配 2?3-設定定義順序的規則,例如,如果行之間的差異小于 0,5,那么它們應該被分配相同的行順序。如果更多,那么訂單號應該增加。先感謝您!
np.random.seed(42)
df2=pd.DataFrame(np.random.randint(1,10, 10), columns=['numbers'])
df2=df2.sort_values('numbers')
df2['ord']=1 np.arange(0, len(df2['numbers']))

uj5u.com熱心網友回復:
如果您想對相同的“數字”使用相同的訂單號,請使用groupby.ngroup:
df2['ord'] = df2.groupby('numbers').ngroup().add(1)
輸出:
numbers ord
5 3 1
1 4 2
9 4 2
3 5 3
8 5 3
0 7 4
4 7 4
6 7 4
2 8 5
7 8 5
用閾值分組
grouper = df2['numbers'].diff().gt(1).cumsum()
df2['ord_threshold'] = df2.groupby(grouper).ngroup().add(1)
輸出:
numbers ord ord_threshold
5 3 1 1
1 4 2 1
9 4 2 1
3 5 3 1
8 5 3 1
0 7 4 2
4 7 4 2
6 7 4 2
2 8 5 2
7 8 5 2
uj5u.com熱心網友回復:
您也可以通過重置索引來做到這一點:
np.random.seed(42)
df2=pd.DataFrame(np.random.randint(1,10, 10), columns=['numbers'])
df2=df2.sort_values('numbers').reset_index(drop=True)
#reset indexes
df2.reset_index(inplace=True)
#put value of new indexes ( 1) in ord column
df2['ord']=df2['index'] 1
#clean index column created
df2.drop(columns='index',inplace=True)
print(df2)
結果:
numbers ord
0 3 1
1 4 2
2 4 3
3 5 4
4 5 5
5 7 6
6 7 7
7 7 8
8 8 9
9 8 10
uj5u.com熱心網友回復:
讓我們試試
df2['ord'] = df2['numbers'].factorize()[0] 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496112.html
上一篇:基于一個重復行構建資料框
