ここに表示されているのは、所有しているもの、つまりすべてのキー値のペアがパターンに従っているとします。 キー+スペース+ x +スペース+値の場合は、(?P<key>\w+)(?:\s+x\s+(?P<value>\d+))?
を使用してキャプチャできます。これを打破するには、次の
(?P<key>\w+)
が単語文字で構成されてという名前のグループkey
、すなわち[0-9A-Za-z_]
それが当てはまらない場合は、これを調整するキャプチャ。
(?:\s+x\s+(?P<value>\d+))?
は、値がの場合に欠損するオプションのグループをキャプチャします。
\s+x\s+
は、結果で無視される分割文字列をキャプチャします。
(?P<value>\d+)
は、数字で構成される別の名前付きグループvalue
をキャプチャします。 df1 = (df[1].str.extractall("(?P<key>\w+)(?:\s+x\s+(?P<value>\d+))?")
.fillna(1).reset_index(level=1, drop=True))
df1
df1
すべてのキーを抽出した後縮小データセットを与える:
行8の場合のように複数の一致がある場合、複数の行になりextractall
と組み合わせ値のペアを使用して、必要な書式に変換するには、キー列を非表示にして列見出しを作成し、元のデータフレームのインデックスでインデックスを再作成します。
df1.set_index('key', append=True).value.unstack(level=1).reindex(df.index).fillna(0)