python - 用 pandas 数据框中的一些默认值填充每个列组合的值

标签 python pandas dataframe

我有一个像这样的数据框,

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.unstackDataFrame.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.reindexMultiIndex.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/

相关文章:

python - 如何使用pandas中的DataFrame实现概率边缘化功能?

python - 根据列的值进行分组

python - 如何在matplotlib中设置轴乘数的值?

python - 网络抓取 - 转会市场最有值(value)的球员

python - 根据 pandas 数据框中特定列中的值提取列值

python - 获取满足条件的 Pandas DataFrame 行的整数索引?

python - NaN 值与分隔符相同 - 如何导入?

python - 将列表添加为 pandas Dataframe 中的值

pandas - 如何在 Pandas 数据框中用 NaN 替换末尾附加符号的值

python - Python 中的 MongoDB 连接管理