![](/img/trans.png)
[英]How can I access the next row in pandas dataframe after a certain cell value
[英]How can a pandas dataframe be framed based on a row with a specific cell value until the next value change?
我有以下問題:
我的數據集包含輸出不同值的行。 因此出現數值和分類值。 我想在特定 ID“B”的值“狀態 1”發生變化時立即拆分數據集。 拆分數據集應包含所有行,直到狀態再次更改。 每次狀態改變時,都應該生成一個新的數據集。 其他 ID 可以具有相同的值,但索引應該是
輸入數據
data = {'ID': ['B', 'A', 'C', 'D', 'B','A','D'],
'value': ["status 1",125, "status1", 450, "status 2", 20 , 30],
'timestamp': [1632733508, 1632733508, 1632733511, 1632733512, 1632733513, 1632733515, 1632733518]
}
df1 = pd.DataFrame(data)
df1
ID value timestamp
0 B status 1 1632733508
1 A 125 1632733508
2 C status 1 1632733511
3 D 450 1632733512
4 B status 2 1632733513
5 A 20 1632733515
6 D 30 1632733518
期望輸出
ID value timestamp
0 B status 1 1632733508
1 A 125 1632733508
2 C status 1 1632733511
3 D 450 1632733512
ID value timestamp
1 B status 2 1632733513
2 A 20 1632733515
3 D 30 1632733518
通過B
的comapre ID
創建掩碼,並為組累積總和,然后在groupby
循環:
for i, g in df1.groupby(df1['ID'].eq('B').cumsum()):
print (g)
ID value timestamp
0 B status 1 1632733508
1 A 125 1632733508
2 C 300 1632733511
3 D 450 1632733512
ID value timestamp
4 B status 2 1632733513
5 A 20 1632733515
6 D 30 1632733518
對於 DataFrame 列表,請使用:
dfs = [g for i,g in df1.groupby(df1['ID'].eq('B').cumsum())]
print (dfs)
[ ID value timestamp
0 B status 1 1632733508
1 A 125 1632733508
2 C 300 1632733511
3 D 450 1632733512, ID value timestamp
4 B status 2 1632733513
5 A 20 1632733515
6 D 30 1632733518]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.