我的原始数据框如下:List = [['2024-05-25', 'Group 1', 'Year 1', 23466882], ['2024-05-25', 'Group 1', 'Year 2', 458397284], ['2024-05-25', 'Group 1', 'Year 3', 2344545], ['2024-05-25', '
我的原始数据框如下:
List = [['2024-05-25', 'Group 1', 'Year 1', 23466882], ['2024-05-25', 'Group 1', 'Year 2', 458397284], ['2024-05-25', 'Group 1', 'Year 3', 2344545], ['2024-05-25', 'Group 2', 'Year 1', 6662345], ['2024-05-25', 'Group 2', 'Year 2', 46342], ['2024-05-25', 'Group 3', 'Year 1', 34234], ['2024-05-25', 'Group 3', 'Year 2', 45222]]
df = pd.DataFrame(List, columns = ['Report_date', 'Product_group', 'Year', 'Sales'])
对于每个产品组,如果不存在“第 3 年”,则应在末尾添加一个销售额为 11,000 的新行。
输出应如下所示:
我最初的想法是将数据框拆分成每个产品组,如果子数据框没有第 3 年的任何信息,则添加新行,但这种方法似乎不是最佳的。
欢迎提出任何意见。提前谢谢您!
如果仅需要 Year 3
为每个组添加缺失年份,请使用 pd.concat
带有第一个不存在组的筛选行并添加新 Year
值 Sales
:
注意:此解决方案仅为不存在的年份 3 添加新行,如果任何组中不存在相同的年份,此解决方案也有效。例如,如果删除第一行,则年份 1 会丢失。
g = df.loc[df['Year'].eq('Year 3'), 'Product_group']
out = (pd.concat([df,
df.loc[~df['Product_group'].isin(g)]
.drop_duplicates('Product_group').assign(Year='Year 3', Sales=11000)])
.sort_values(['Product_group','Year'], ignore_index=True))
print (out)
Report_date Product_group Year Sales
0 2024-05-25 Group 1 Year 1 23466882
1 2024-05-25 Group 1 Year 2 458397284
2 2024-05-25 Group 1 Year 3 2344545
3 2024-05-25 Group 2 Year 1 6662345
4 2024-05-25 Group 2 Year 2 46342
5 2024-05-25 Group 2 Year 3 11000
6 2024-05-25 Group 3 Year 1 34234
7 2024-05-25 Group 3 Year 2 45222
8 2024-05-25 Group 3 Year 3 11000