我有一个像这样的数据框,
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 值的行,这些行并非所有 col1 值和 col3 值都为 0。
所以最终的数据框看起来像,
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
我可以使用 for 循环对每个可能的 col2 值进行此操作,并与每个 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()
关于python - 用 pandas 数据框中的一些默认值填充每个列组合的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095370/