我有一个这样的数据框,
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。
现在,我想创建具有col2值的行,而这些行并不具有col3值均为0的所有col1值。
所以最终的数据帧看起来像
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
与DataFrame.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] 删除。
我来说两句