私は次のようなパンダのデータフレームを持っています:
UNIT MACHINE
1 a100 001
2 a100 002
3 a100 003
4 a100 001
5 b222 001
6 b222 002
7 b222 002
8 b222 003
「UNIT」に基づいてグループ化し、[001、002、003]「MACHINE」シーケンスのない行を削除したいと思います。つまり、UNIT "a100"のシーケンスは[001、002、003、001]であるため、削除する必要がありますが、MACHINE 002の繰り返しに関係なくシーケンスが正しいため、UNIT "b222"は残ります。
出力は次のようになります。
UNIT MACHINE
5 b222 001
6 b222 002
7 b222 002
8 b222 003
シーケンス[001、002、003]は、ここで例として記述した許容可能なMACHINEシーケンスの1つです。そのようなシーケンスはいくつかあり、それらはすべて単調に増加しています。
これを実行するには、GroupByとdropをどのように組み合わせる必要がありますか?
In [26]: chk_set = set(df.MACHINE.unique())
In [27]: df[df.groupby('UNIT')['MACHINE']
.transform(lambda x: x.is_monotonic_increasing & chk_set.issubset(set(x)))]
Out[27]:
UNIT MACHINE
5 b222 001
6 b222 002
7 b222 002
8 b222 003
更新:
次のDFがあると仮定します。
In [90]: df
Out[90]:
UNIT MACHINE
1 a100 001
2 a100 002
3 a100 003
4 a100 001
5 b222 001
6 b222 002
7 b222 002
8 b222 003
9 c1 001
10 c1 003
11 c2 078
12 c2 079
13 c2 080
14 c3 078
16 c3 080
照合する連結グループの配列:
In [91]: chk_groups = np.array(['001002003','078079080'])
解決:
In [92]: df[df.groupby('UNIT')['MACHINE']
.transform(lambda x: x.is_monotonic_increasing
& np.in1d(x.unique().sum(),chk_groups))]
Out[92]:
UNIT MACHINE
5 b222 001
6 b222 002
7 b222 002
8 b222 003
11 c2 078
12 c2 079
13 c2 080
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加