私は次のデータフレームを持っています:
df =
ID TYPE VD_0 VD_1 VD_2 VD_3
1 ABC V1234 456 123 564
2 DBC 456 A45 123 564
3 ABD 456 V1234 456 123
4 ABD 123 V1234 SSW 123
値の次のリストがありVD_0
、VD_1
、VD_2
とはVD_3
:
myList = [V1234,456,A45]
私はない行のみを取得したいdf
から値の2連番の回出てくる持っているmyList
列のをVD_0
、VD_1
、VD_2
とVD_3
。
結果はこれです:
result =
ID TYPE VD_0 VD_1 VD_2 VD_3
1 ABC V1234 456 123 564
2 DBC 456 A45 123 564
3 ABD 456 V1234 456 123
例えば、一列にしてID
1の値VD_0
とはVD_1
同じであるV1234
と456
、それに対応し、これらの値の両方ともに属しますmyList
。同じロジックがID
2(456
、A45
)と3(456
、V1234
)の行に適用されます。
どうすればいいですか?
私はMaxUの答えの始まりに同意しますが、それでも終わりはIIUCの方が簡単なはずです。必要なフィルターは、リストから2つの連続した一致を取得する必要があります。この答えは、isinの結果の行ごとの合計を2つずつ合計した場合に少なくとも2の値にする必要があると言うことで得られます。これは、axis = 1に沿った2期間のローリングウィンドウの合計と呼ばれます。次に、各行の最大値を取得すると、一致の値は2以上になります。
subset = df.filter(like='VD_')
df[subset.isin(myList).rolling(2, axis=1).sum().max(axis=1)>=2]
Out[26]:
ID TYPE VD_0 VD_1 VD_2 VD_3
0 1 ABC V1234 456 123 564
1 2 DBC 456 A45 123 564
2 3 ABD 456 V1234 456 123
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加