为了账号安全,请及时绑定邮箱和手机立即绑定

如何向下迭代一列名称以使用每个名称的出现次数填充新列

如何向下迭代一列名称以使用每个名称的出现次数填充新列

Cats萌萌 2022-06-28 17:37:30
我正在处理名为“公司”的数据框列(您可以在下面看到它的样子)。我想用这个专栏来创建另一个名为“occurrences”的专栏。我的目标是根据公司名称出现的次数顺序填充出现列。我希望它看起来像这样company   |   occurrencescompany 1 |   1company 1 |   2company 1 |   3company 2 |   1company 2 |   2company 3 |   1company 4 |   1company 4 |   2company 5 |   1company 5 |   2company 5 |   3company 5 |   4不幸的是,我在这样做时遇到了很多麻烦。这是我开始尝试的尝试,但首先,它创建了一个无限循环,我无法弄清楚如何摆脱它,其次,即使它有效,这也会错误地填充值。除此之外,嵌套在 while 语句中的 if 语句返回的是整个列,而不是公司的最终计数。 def occurrences(companies): occurrences = []     for i in range(len(companies)):         x = 0         occurrences.append(x)         while str(companies[i]) == str(companies[i+1]):             x = x+1             occurrences.append(x)             if str(companies[i]) is not str(companies[i+1]):                 x = companies.str.count(companies[i])                 occurrences.append(x)     return round_number occurrences(companies)我知道“for i in range(len(companies))”这一行在列中向下迭代,并且我知道“str(companies[i]) == str(companies[i+1])”确实比较了公司名称. 我相信其他一切都是完全错误的。任何建议将不胜感激。
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您不需要为此使用循环。您可以使用groupby+ cumcount:


df['ocurrence']=df.groupby('company').cumcount()+1

print(df)

      company  ocurrence

0   company 1          1

1   company 1          2

2   company 1          3

3   company 2          1

4   company 2          2

5   company 3          1

6   company 4          1

7   company 4          2

8   company 5          1

9   company 5          2

10  company 5          3

11  company 5          4


查看完整回答
反对 回复 2022-06-28
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

你有几个错误:

 for i in range(len(companies)):

这应该是你唯一的循环;它将推动您的旅行下降。其他一切都将简单地使用i行索引。

     while str(companies[i]) == str(companies[i+1]):

使用if;您每次迭代只进行一次检查。使其成为while意味着此whiel循环中的某些内容必须更改 的值i或表中的值-否则,条件永远不会改变,并且您将进入无限循环。

         if str(companies[i]) is not str(companies[i+1]):

我不明白为什么会存在这种情况。首先,is not 必须为真,因为这两个对象不可能有相同的参照物:它们是同一序列中的不同位置。如果您在标签不同时尝试做某事,则取消缩进并将其替换为 simple else,指的是if您刚刚从格式不正确的while.


查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信