如果值不存在,则通过对列进行分组来追加新行[重复]

问题描述 投票:0回答:1

我想通过对年份和月份进行分组,每个年份和月份都有不同的帐户,如果该帐户在该年和月份不存在,则该值将为0。

我该如何解决这个问题?

python python-3.x pandas dataframe
1个回答
0
投票

代码

使用

merge
+
how=cross
创建笛卡尔积

out = (df[['year', 'month']]
       .drop_duplicates()
       .merge(df[['account']].drop_duplicates(), how='cross')
       .merge(df, how='left')
       .assign(value=lambda x: x['value'].fillna(0))
)

    year  month account  value
0   2023      1    1234    1.0
1   2023      1    9372    3.0
2   2023      1    8735    0.0
3   2023      1    0000    0.0
4   2023      2    1234    2.0
5   2023      2    9372    0.0
6   2023      2    8735    2.0
7   2023      2    0000    0.0
8   2024      1    1234    0.0
9   2024      1    9372    0.0
10  2024      1    8735    9.0
11  2024      1    0000    6.0

示例代码

import pandas as pd

data = {'year': [2023, 2023, 2023, 2023, 2024, 2024],
        'month': [1, 1, 2, 2, 1, 1],
        'account': ['1234', '9372', '1234', '8735', '8735', '0000'],
        'value': [1, 3, 2, 2, 9, 6]}

df = pd.DataFrame(data)
© www.soinside.com 2019 - 2024. All rights reserved.