簡體   English   中英

如何根據不同的條件為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM