Python、Pandas:为缺失值添加默认值

时间:2021-01-18 07:15:40

标签: python pandas dataframe

早上好,

现在我的数据框看起来像这样:

date        |    type    |    value
2021-01-01  |    extern  |    17
2021-01-01  |    intern  |    19.5
2021-01-02  |    extern  |    104
2021-01-02  |    intern  |    8
2021-01-03  |    extern  |    17.4
2021-01-04  |    intern  |    34

如您所见,日期 2021-01-032021-01-04 缺少行,因为两者都没有 extern 实习生 价值观。我想知道是否有可能将这个数据框变成这样的:

date        |    type    |    value
2021-01-01  |    extern  |    17
2021-01-01  |    intern  |    19.5
2021-01-02  |    extern  |    104
2021-01-02  |    intern  |    8
2021-01-03  |    extern  |    17.4
2021-01-03  |    intern  |    0
2021-01-04  |    intern  |    34
2021-01-04  |    extern  |    0

注意事项:

  • type 中的值数量仅限于 - 例如 - 这两个(externintern)。没有其他可能弹出的值。

希望有人知道这种情况的解决方案!?感谢我们的帮助和美好的一天!

1 个答案:

答案 0 :(得分:2)

您可以使用 complete 中的 pyjanitor 函数来暴露缺失的组合;目前您必须从 github:

安装最新的开发版本
# install latest dev version
# pip install git+https://github.com/ericmjl/pyjanitor.git

import janitor

df.complete(["date", "type"], fill_value={"value": 0})

     date      type     value
0   2021-01-01  extern  17.0
1   2021-01-01  intern  19.5
2   2021-01-02  extern  104.0
3   2021-01-02  intern  8.0
4   2021-01-03  extern  17.4
5   2021-01-03  intern  0.0
6   2021-01-04  extern  0.0
7   2021-01-04  intern  34.0

仅使用 Pandas',我们可以为列 'A' 和 'B' 创建唯一值,构建新的 MultiIndex,然后重新索引数据框:

new_index = pd.MultiIndex.from_product(
[df.date.unique(), df.type.unique()], names=["date", "type"])

 new_index

 MultiIndex([('2021-01-01', 'extern'),
                ('2021-01-01', 'intern'),
                ('2021-01-02', 'extern'),
                ('2021-01-02', 'intern'),
                ('2021-01-03', 'extern'),
                ('2021-01-03', 'intern'),
                ('2021-01-04', 'extern'),
                ('2021-01-04', 'intern')],
           names=['date', 'type'])

现在,set indexreindexreset index

df.set_index(["date", "type"]).reindex(new_index, fill_value=0).reset_index()

    date    type    value
0   2021-01-01  extern  17.0
1   2021-01-01  intern  19.5
2   2021-01-02  extern  104.0
3   2021-01-02  intern  8.0
4   2021-01-03  extern  17.4
5   2021-01-03  intern  0.0
6   2021-01-04  extern  0.0
7   2021-01-04  intern  34.0

complete 中的 pyjanitor 函数是上述步骤的抽象,具有更多选项,特别是对于嵌套组合和全新值。