🕌
pandas でデータの変化点のみを取り出す
pandas でデータの変化点のみを取り出す
DataFrame の特定の列が変化した行のみ取り出す
コード
以下サンプルコードでは乱数で入力データを作っているため、実行しても説明で記載のデータと一致しない。(一致するとは限らない)
説明
df
に pandas の DataFrame が入っているとする。
state
が変化したタイミングのデータを取得したいとする。
df
オリジナルデータ (乱数を使って生成)
x | y | state | |
---|---|---|---|
0 | 0 | 100 | 3 |
1 | 1 | 101 | 1 |
2 | 2 | 102 | 0 |
3 | 3 | 103 | 1 |
4 | 4 | 104 | 1 |
5 | 5 | 105 | 1 |
6 | 6 | 106 | 1 |
7 | 7 | 107 | 2 |
8 | 8 | 108 | 1 |
9 | 9 | 109 | 0 |
df.shift()
1行下に shift
x | y | state | |
---|---|---|---|
0 | nan | nan | nan |
1 | 0 | 100 | 3 |
2 | 1 | 101 | 1 |
3 | 2 | 102 | 0 |
4 | 3 | 103 | 1 |
5 | 4 | 104 | 1 |
6 | 5 | 105 | 1 |
7 | 6 | 106 | 1 |
8 | 7 | 107 | 2 |
9 | 8 | 108 | 1 |
states != states.shift()
state
を下に 1行 shift したものとオリジナルが等しいか判断する。
変化点になる行の場合 change
の値が True になる。
states = df['state']
df['change'] = states != states.shift()
df に change
が追加されている。
x | y | state | change | |
---|---|---|---|---|
0 | 0 | 100 | 3 | True |
1 | 1 | 101 | 1 | True |
2 | 2 | 102 | 0 | True |
3 | 3 | 103 | 1 | True |
4 | 4 | 104 | 1 | False |
5 | 5 | 105 | 1 | False |
6 | 6 | 106 | 1 | False |
7 | 7 | 107 | 2 | True |
8 | 8 | 108 | 1 | True |
9 | 9 | 109 | 0 | True |
df[ df['change'] ]
df['change']
が True である要素のみ df から取り出して別の DataFrame (dfChange
) に格納する。
dfChange = df[ df['change'] ]
dfChange (df
で state
の値が変化した要素のみ含んでいる)
x | y | state | change | |
---|---|---|---|---|
0 | 0 | 100 | 3 | True |
1 | 1 | 101 | 1 | True |
2 | 2 | 102 | 0 | True |
3 | 3 | 103 | 1 | True |
7 | 7 | 107 | 2 | True |
8 | 8 | 108 | 1 | True |
9 | 9 | 109 | 0 | True |
Discussion