【问题标题】:Python Pandas : Set column values as number of occurrences of another columnPython Pandas:将列值设置为另一列的出现次数
【发布时间】:2020-12-25 02:17:14
【问题描述】:

我的数据框两列上的 for 循环出现问题。 有了这个 for 循环,我想添加一个新列,正如我在这个例子中展示的那样:

我从这个数据框开始:

     person       store_id
0    Rose         24256
1    Tim          24257
2    Tim          27896
3    Tim          29547
4    Jack         24258
5    Jack         27897

我想添加的新列应该是这样的。 换句话说,我想添加一列显示每个人访问的商店的枚举。

     person       store_id      enum
0    Rose         24256         1
1    Tim          24257         1
2    Tim          27896         2
3    Tim          29547         3
4    Jack         24258         1
5    Jack         27897         2

这是我尝试过的代码,但没有得到我想要的。

for x in df['person']:
    i = 1
    for x in df['store_id']:
        df['enum'] = i
        i = i + 1

我也尝试了如下,再次得到错误的结果:

for x,y in zip(df['person'], df['store_id']):
    i = 1
    df['enum'] = i
    i = i + 1

我做错了什么? 感谢您的帮助!

【问题讨论】:

  • 你得到了什么结果?
  • 在第一种情况下,我将所有行 6 作为值。在第二个中,每行也有 1 个。

标签: python python-3.x pandas dataframe loops


【解决方案1】:

无需遍历多个列;使用iterrows 进行迭代并使用字典来跟踪访问过的商店 id 位置“enum”,然后设置 enum 列:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={"person":[ 'Rose', 'Tim', 'Tim', 'Tim', 'Jack', 'Jack' ],
                    "store_id": [1580407549, 1580557630, 1580571344, 1580647900, 1580755371, 1580911127]})

store_index = {}
enums = []
for index, row in df.iterrows():
    sid = row['person']
    if sid not in store_index:
        store_index[sid] = 0
    store_index[sid] += 1
    enums.append(store_index[sid])
df['enum'] = enums
print(df)

输出:

  person    store_id  enum
0   Rose  1580407549     1
1    Tim  1580557630     1
2    Tim  1580571344     2
3    Tim  1580647900     3
4   Jack  1580755371     1
5   Jack  1580911127     2

【讨论】:

  • 我还有一个问题。我试图改变一些输入数据。 store_id 的新数据是更长的数字。示例:store_id': [1580407549, 1580557630, 1580571344, 1580647900, 1580755371, 1580911127]。在这种情况下,代码不再起作用,我得到了从 1 到 6 的枚举列值。你能解释一下为什么吗?
  • 这些都是不同的store_ids,所以它们的枚举值是不同的
  • 我认为您的代码有所不同,而不是我真正的意思。现在我明白了,为什么它不适用于新数据。
  • 在您给出的示例中,enum 根据其位置对应于每个 store_id 的唯一值。否则你有什么期望?
  • 我要的不是每个店铺的ID,只是统计每个人去过的店铺。如果多个人的 ID 相同,则无关紧要。 Tim 访问了 3 家商店,我希望将 1、2、3 作为值。对于 Jack 1,2,不取决于商店 ID 的值。我希望,现在你能明白我的意思了。对不起,我的错,没有解释清楚!
猜你喜欢
  • 2018-08-16
  • 2018-09-20
  • 2019-05-03
  • 2022-06-16
  • 2016-12-14
  • 2022-06-30
  • 2022-07-29
  • 2023-02-08
相关资源
最近更新 更多