我有以下pandas dataframe:
df = pd.DataFrame({'Year': [2020, 2021, 2022, 2022, 2018, 2019, 2020, 2021],
'Cat1': ['level1', 'level1', 'level1', 'level1', 'level2', 'level2', 'level2', 'level2'],
'Cat2': ['sublevel1', 'sublevel1', 'sublevel1', 'sublevel1', 'sublevel2', 'sublevel2', 'sublevel2', 'sublevel2'],
'value': [1, 2, 3, 4, 5, 6, 7, 8]})
Year Cat1 Cat2 value
0 2020 level1 sublevel1 1
1 2021 level1 sublevel1 2
2 2022 level1 sublevel1 3
3 2022 level1 sublevel1 4
4 2018 level2 sublevel2 5
5 2019 level2 sublevel2 6
6 2020 level2 sublevel2 7
7 2021 level2 sublevel2 8
我想在列'Year'中取唯一值,并复制Cat1和Cat2的值,将结果值填充为0,结果为:
Year Cat1 Cat2 value
0 2018 level1 sublevel1 0
1 2019 level1 sublevel1 0
2 2020 level1 sublevel1 1
3 2021 level1 sublevel1 2
4 2022 level1 sublevel1 3
5 2022 level1 sublevel1 4
6 2018 level2 sublevel2 5
7 2019 level2 sublevel2 6
8 2020 level2 sublevel2 7
9 2021 level2 sublevel2 8
10 2022 level2 sublevel2 0
我考虑过使用groupby(),但我不确定它是否有效,因为我想保留跨Year有重复的行,例如索引2和3上的行。我还尝试了将Year设置为索引,并使用set_index()和唯一的Year值来填充它,但这似乎对有重复的值不起作用。
使用groupby()的其他尝试导致了我不想要的值。返回level1和sublevel2的行,这是我想避免的。
任何帮助非常感谢。
3条答案
按热度按时间6ojccjat1#
我将使用
set
操作(和groupby.agg
)来识别每组缺失的年份,然后手工制作缺失的行,并将它们返回到原始数据:输出量:
lokaqttq2#
一个选项是完整的:
注意
Cat
列是如何 Package 在一个元组中的-函数将它们一起处理;你会得到一个不同的输出,如果它是这样的->'Year', 'Cat1','Cat2'
。9udxz4iz3#
通过创建一个包含“Year”列的唯一值的新DataFrame,然后将其与原始DataFrame合并,可以获得所需的结果
这段代码会给予你想要的输出: