![](/img/trans.png)
[英]How to exclude rows based on multi column value conditions in pandas dataframe?
[英]How to assign value to particular column in pandas dataframe based on different conditions?
我有一個數據集,大約有 40,000 行,每行代表數據集中的一條記錄。 名為“region_code”的特征之一本質上是分類的,但使用 integer 表示。 它類似於 pincode/zipcode。 大約有 5316 個唯一的“區域代碼”值,這些區域代碼從 1 開始,go 到 5690。這意味着,范圍是 [1,5690]。 我想重新分配這些值,以便將區域代碼位於 [1,20] 范圍內的所有行的前 20 個區域代碼分配為“1”,即下一批區域代碼。 [21,40] 將被分配“2”的區域代碼,下一批區域代碼即 [41,60] 將被分配“3”的區域代碼,依此類推。 最后一批 20 個區域代碼,即 5681 到 5700 將具有值 '285' (5700//20)。
我可以使用 if-else 來做到這一點,但是我必須編寫 285 個 if-else 條件,每個條件代表一批 20 個區域代碼的一個條件,但這不是正確的方法,因為它需要太多的手動工作。 為此,我需要一個簡短的代碼。
為了模擬這個問題以便我可以為它編寫代碼,我創建了一個小型 dataframe,區域代碼從 1 到 50。在這里,讓我們將其分組為 5 個批次。因此,前 5 個區域代碼將獲得值 '1 ',接下來的 5 個區域代碼將獲得值 '2',依此類推,直到最后一批區域代碼將獲得值 '10'。
Region_Code = np.arange(1,51)
pd.DataFrame(Region_Code, columns =['Region_Code'])
預期的 output 將類似於以下代碼創建的:
transformed = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9,9,10,10,10,10,10]
pd.DataFrame(transformed, columns=['Region_Code_new'])
我手動創建了該列表,讓您了解 output 的外觀。
在我們最初的問題中,我們必須每批 20 個區域代碼,因此將有 285 個這樣的批次。 我的問題是如何使用 for 循環或一些類似的邏輯來做到這一點?
您可以floor divide
列與 5(原始數據集中的 20)分開:
>>> Region_Code = np.arange(1,51)
>>> pd.DataFrame(Region_Code, columns =['Region_Code'])
>>> df.assign(Region_code_new=(df.Region_Code.sub(1) // 5) + 1)
Region_Code Region_code_new
0 1 1
1 2 1
2 3 1
3 4 1
4 5 1
5 6 2
6 7 2
7 8 2
8 9 2
9 10 2
10 11 3
11 12 3
12 13 3
13 14 3
14 15 3
15 16 4
16 17 4
17 18 4
18 19 4
19 20 4
20 21 5
21 22 5
22 23 5
23 24 5
24 25 5
25 26 6
26 27 6
27 28 6
28 29 6
29 30 6
30 31 7
31 32 7
32 33 7
33 34 7
34 35 7
35 36 8
36 37 8
37 38 8
38 39 8
39 40 8
40 41 9
41 42 9
42 43 9
43 44 9
44 45 9
45 46 10
46 47 10
47 48 10
48 49 10
49 50 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.