私はこのようなデータフレームを持っています、
df
col1 col2 col3
1907 CD 49
1907 FR 33
1907 SA 34
1908 PR 1
1908 SA 37
1909 PR 16
1909 SA 38
現在、CDはcol1 1908および1909値で存在せず、FRは1908および1909値で存在せず、PRは1907で存在しません。
ここで、col3値が0のすべてのcol1値ではないcol2値の行を作成します。
したがって、最終的なデータフレームは次のようになります。
df
col1 col2 col3
1907 CD 49
1907 FR 33
1907 SA 34
1907 PR 0
1908 CD 0
1908 FR 0
1908 PR 1
1908 SA 37
1908 CD 0
1908 FR 0
1909 PR 16
1909 SA 38
これは、可能なすべてのcol2値でforループを使用し、すべてのcol1グループと比較して行うことができます。しかし、私はそれを最も効率的に行うためのショートカットを探しています。
で埋められたすべての組み合わせにDataFrame.unstack
withDataFrame.stack
を使用します0
。
df = df.set_index(['col1','col2']).unstack(fill_value=0).stack().reset_index()
print (df)
col1 col2 col3
0 1907 CD 49
1 1907 FR 33
2 1907 PR 0
3 1907 SA 34
4 1908 CD 0
5 1908 FR 0
6 1908 PR 1
7 1908 SA 37
8 1909 CD 0
9 1909 FR 0
10 1909 PR 16
11 1909 SA 38
別のアイデアはで使用DataFrame.reindex
することMultiIndex.from_product
です:
mux = pd.MultiIndex.from_product([df['col1'].unique(),
df['col2'].unique()], names=['col1','col2'])
df = df.set_index(['col1','col2']).reindex(mux, fill_value=0).reset_index()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加