代码
使用
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)