首页 > 解决方案 > 在条件匹配的df中迭代数字

问题描述

在尝试自学 Pandas 的同时玩弄不同的数据框,这让我有一段时间感到困惑,这似乎缺乏对编程的理解,但有人能帮忙吗?

考虑以下df:

ID  Name                    Week
1   Matthew                 1751
1   Matthew                 1751
1   Matthew                 1751
2   Jon                     1751
2   Jon                     1751
2   Jon                     1751
2   Jon                     1751
3   Lisa                    1751
3   Lisa                    1751
3   Lisa                    1751
3   Lisa                    1751
3   Lisa                    1751
3   Lisa                    1751
3   Lisa                    1751

我在这里尝试做的是为索引中的每个出现的周数添加 + 1,但仅在名称与其自身匹配的地方。

ID  Name            Week
1   Matthew         1751
1   Matthew         1752
1   Matthew         1753
2   Jon             1751
2   Jon             1752
2   Jon             1753
2   Jon             1754
3   Lisa            1751
3   Lisa            1752
3   Lisa            1753
3   Lisa            1754
3   Lisa            1755
3   Lisa            1756
3   Lisa            1757

我尝试了一个简单的 for 循环

但它只是将索引的长度增加到数字,我也试过

for n in df.Name:
    print(len(n)) 

它只返回每个字符串的长度(正确),添加索引只返回索引的长度,即 n 出现的次数。

我错过了一些基本的东西吗?我应该先创建一个列表然后将其传递给df吗?

标签: pythonpandas

解决方案


采用groupby.cumcount

df['Week'] = df.Week.add(df.groupby('Name').cumcount())

   ID    Name   Week
0   1   Matthew 1751
1   1   Matthew 1752
2   1   Matthew 1753
3   2   Jon     1751
4   2   Jon     1752
5   2   Jon     1753
6   2   Jon     1754
7   3   Lisa    1751
8   3   Lisa    1752
9   3   Lisa    1753
10  3   Lisa    1754
11  3   Lisa    1755
12  3   Lisa    1756
13  3   Lisa    1757

推荐阅读