使用 pandas,我創建了一個資料框,其中包含按欄位劃分的雜草嚴重程度資訊。每個領域都可以包含各種型別的雜草。記錄按[田地、雜草、日期]排序,以觀察雜草的演變。理想情況下,隨著時間的推移,每一種雜草的嚴重程度都應該得到抑制。為了檢測關鍵專案,我想比較兩個連續的雜草嚴重性,按田地和雜草型別分組,并將抑制狀態注釋為兩個觀察到的嚴重性之間的差異。
下面是示例資料
Field Date Weed Severity
1 2021-06-08 Cirsium arvense 3
1 2021-07-06 Cirsium arvense 3
1 2021-07-27 Cirsium arvense 2
1 2021-08-19 Cirsium arvense 1
1 2021-07-26 Lactuca Serriola 3
1 2021-06-08 Myagrum perfoliatum 2
1 2021-07-06 Sonchus oleraceus 3
1 2021-08-19 Sorghum halepense 2
1 2021-07-26 Xanthium strumarium 2
1 2021-07-27 Xanthium strumarium 2
1 2021-08-19 Xanthium strumarium 1
1 2020-07-08 Euphorbia cyparissias 1
1 2020-07-08 Matricaria chamomilla 1
1 2020-07-08 Polygonum Lapathifolium 1
1 2020-07-08 Sorghum halepense 5
1 2020-07-08 Xanthium strumarium 1
2 2021-09-14 Ambrosia artemisifolia 2
2 2021-05-29 Chenopodium album 1
2 2021-05-29 Cirsium arvense 1
2 2021-09-14 Echinochola crus gali 4
2 2021-05-29 Phragmites Australis 1
2 2021-05-29 Polygonum spp 1
2 2021-05-29 Setaria viridis 2
2 2021-05-29 Sinapis arvensis 1
2 2021-07-06 Sorghum halepense 4
2 2021-09-14 Sorghum halepense 3
2 2021-05-29 Xanthium strumarium 1
2 2021-09-14 Xanthium strumarium 3
在欄位 1 上,隨著嚴重程度的降低,Cirsium arvense 被成功抑制,因此成功率應該是(對于第 1 -4 行)[0, 0, 1, 1]。
另一方面,例如,欄位 2(最后兩行)上的 Xanthium strumarium 未成功抑制,因此值應為 [0, -2]。
在無條件比較連續行的情況下,我通常會移動列值并從原始列中減去移動后的列。在觀察列的情況下,根據其他值,我想知道,觀察差異的好方法是什么。說第 4 行和第 5 行不能簡單地比較,因為不應該比較不同雜草的嚴重性值。
uj5u.com熱心網友回復:
用Series.rsubwith從右邊減去移位值DataFrameGroupBy.shift:
df['rate'] = (df['Severity'].rsub(df.groupby(['Field','Weed'])['Severity'].shift())
.fillna(0, downcast='infer'))
print (df)
Field Date Weed Severity rate
0 1 2021-06-08 Cirsium arvense 3 0
1 1 2021-07-06 Cirsium arvense 3 0
2 1 2021-07-27 Cirsium arvense 2 1
3 1 2021-08-19 Cirsium arvense 1 1
4 1 2021-07-26 Lactuca Serriola 3 0
5 1 2021-06-08 Myagrum perfoliatum 2 0
6 1 2021-07-06 Sonchus oleraceus 3 0
7 1 2021-08-19 Sorghum halepense 2 0
8 1 2021-07-26 Xanthium strumarium 2 0
9 1 2021-07-27 Xanthium strumarium 2 0
10 1 2021-08-19 Xanthium strumarium 1 1
11 1 2020-07-08 Euphorbia cyparissias 1 0
12 1 2020-07-08 Matricaria chamomilla 1 0
13 1 2020-07-08 Polygonum Lapathifolium 1 0
14 1 2020-07-08 Sorghum halepense 5 0
15 1 2020-07-08 Xanthium strumarium 1 0
16 2 2021-09-14 Ambrosia artemisifolia 2 0
17 2 2021-05-29 Chenopodium album 1 0
18 2 2021-05-29 Cirsium arvense 1 0
19 2 2021-09-14 Echinochola crus gali 4 0
20 2 2021-05-29 Phragmites Australis 1 0
21 2 2021-05-29 Polygonum spp 1 0
22 2 2021-05-29 Setaria viridis 2 0
23 2 2021-05-29 Sinapis arvensis 1 0
24 2 2021-07-06 Sorghum halepense 4 0
25 2 2021-09-14 Sorghum halepense 3 1
26 2 2021-05-29 Xanthium strumarium 1 0
27 2 2021-09-14 Xanthium strumarium 3 -2
uj5u.com熱心網友回復:
groupby“田地”和“雜草”以及各組的使用diff方法Severity。由于日期在每個組中排序,我們得到了跨時間的抑制狀態。由于diff找到了一個元素和前一行中的一個元素之間的差異,為了獲得從上到下的差異,我們在整個列上放置了一個負號以使符號正確。
df['Suppression Status'] = -df.groupby(['Field', 'Weed'])['Severity'].diff().fillna(0).astype(int)
輸出:
Field Date Weed Severity Suppression Status
0 1 2021-06-08 Cirsium arvense 3 0
1 1 2021-07-06 Cirsium arvense 3 0
2 1 2021-07-27 Cirsium arvense 2 1
3 1 2021-08-19 Cirsium arvense 1 1
4 1 2021-07-26 Lactuca Serriola 3 0
5 1 2021-06-08 Myagrum perfoliatum 2 0
6 1 2021-07-06 Sonchus oleraceus 3 0
7 1 2021-08-19 Sorghum halepense 2 0
8 1 2021-07-26 Xanthium strumarium 2 0
9 1 2021-07-27 Xanthium strumarium 2 0
10 1 2021-08-19 Xanthium strumarium 1 1
11 1 2020-07-08 Euphorbia cyparissias 1 0
12 1 2020-07-08 Matricaria chamomilla 1 0
13 1 2020-07-08 Polygonum Lapathifolium 1 0
14 1 2020-07-08 Sorghum halepense 5 -3
15 1 2020-07-08 Xanthium strumarium 1 0
16 2 2021-09-14 Ambrosia artemisifolia 2 0
17 2 2021-05-29 Chenopodium album 1 0
18 2 2021-05-29 Cirsium arvense 1 0
19 2 2021-09-14 Echinochola crus gali 4 0
20 2 2021-05-29 Phragmites Australis 1 0
21 2 2021-05-29 Polygonum spp 1 0
22 2 2021-05-29 Setaria viridis 2 0
23 2 2021-05-29 Sinapis arvensis 1 0
24 2 2021-07-06 Sorghum halepense 4 0
25 2 2021-09-14 Sorghum halepense 3 1
26 2 2021-05-29 Xanthium strumarium 1 0
27 2 2021-09-14 Xanthium strumarium 3 -2
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408930.html
標籤:
上一篇:如何在資料框串列中求和值
