我有一个数据框,看起来像这样:
df = pd.DataFrame({"Name":['a','a','a','b','b','c'],
"Year":[2019, 2020, 2021, 2015, 2019, 2011]})
print(df)
Name Year
0 a 2019
1 a 2020
2 a 2021
3 b 2015
4 b 2019
5 c 2011
我想添加一列,以反映名称出现的次数。例如,当“a”出现在第一行时,“Occurrences”列将显示“1”。当“a”再次出现时(数据已排序),“Occurrences”列将显示“2”,依此类推:
Name Year Occurrences
0 a 2019 1
1 a 2020 2
2 a 2021 3
3 b 2015 1
4 b 2019 2
5 c 2011 1
我曾经考虑过使用某种for循环来实现这一点,但我不太确定如何去做。
先谢了!
3条答案
按热度按时间ergxz8rk1#
下面是使用
pandas.core.groupby.GroupBy.cumcount
的方法ni65a41a2#
有类似的帖子,你可以查看这个答案@Andrej Kesely:
rpppsulh3#
您可以使用以下代码完成此操作:
其工作原理如下:
1.使用
.sort_values()
按Name
后接Year
的顺序对行进行排序(这样即使行未排序也能正常工作)。1.使用
.groupby()
按Name
对行进行分组。1.使用
.cumcount()
计算每个组中行数的累计,并输出为单个Series。(Each运行总计将从0开始,因此将1加到结果以获得真实计数)。
1.将结果赋给名为
Occurances
的新列。测试未排序的DataFrame
输入数据(未排序):
x一个一个一个一个x一个一个二个x
创建
Occurances
列:输出:
分类输出: