簡體   English   中英

如何根據具有特定單元格值的行來構建熊貓數據框,直到下一個值發生變化?

[英]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.

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