分配组内部独特的ID(带有重复的记录)

发布于 2025-02-12 22:24:36 字数 531 浏览 1 评论 0 原文

我有一个数据帧看起来像这样:

df = pd.DataFrame({'type': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'B','C','C','C','D','D'],
                   'value': [1, 1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8],
                  })

我想根据类型和值列创建一个唯一的ID,输出看起来像这样:

df = pd.DataFrame({'type': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'B','C','C','C','D','D'],
                   'value': [1, 1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8],
                   'id': [1, 1, 2, 1, 2, 3, 3, 3, 1, 1, 2, 1, 2],
                  })

I have a DataFrame looks like this:

df = pd.DataFrame({'type': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'B','C','C','C','D','D'],
                   'value': [1, 1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8],
                  })

I would like to create a unique id based on the type and value columns, the output will look like this:

df = pd.DataFrame({'type': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'B','C','C','C','D','D'],
                   'value': [1, 1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8],
                   'id': [1, 1, 2, 1, 2, 3, 3, 3, 1, 1, 2, 1, 2],
                  })

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦太阳 2025-02-19 22:24:36

使用

df['id'] = df.groupby('type')['value'].rank('dense').astype(int)
print (df)
   type  value  id
0     A      1   1
1     A      1   1
2     A      2   2
3     B      3   1
4     B      4   2
5     B      5   3
6     B      5   3
7     B      5   3
8     C      6   1
9     C      6   1
10    C      7   2
11    D      7   1
12    D      8   2

带有 fixsizize

f = lambda x: pd.factorize(x)[0]
df['id'] = df.groupby('type')['value'].transform(f).add(1)

Use DataFrameGroupBy.rank:

df['id'] = df.groupby('type')['value'].rank('dense').astype(int)
print (df)
   type  value  id
0     A      1   1
1     A      1   1
2     A      2   2
3     B      3   1
4     B      4   2
5     B      5   3
6     B      5   3
7     B      5   3
8     C      6   1
9     C      6   1
10    C      7   2
11    D      7   1
12    D      8   2

Or GroupBy.transform with factorize:

f = lambda x: pd.factorize(x)[0]
df['id'] = df.groupby('type')['value'].transform(f).add(1)
攒一口袋星星 2025-02-19 22:24:36

使用:

t = df.groupby(['type']).transform(lambda x: x.iloc[0])
df['id'] = df.groupby(['type', 'value'])[['type', 'value']].apply(lambda x: x.name[1]).reset_index().merge(df, on = ['type', 'value'])[0]-t['value']+1

输出:

type    value   id
0   A   1   1
1   A   1   1
2   A   2   2
3   B   3   1
4   B   4   2
5   B   5   3
6   B   5   3
7   B   5   3
8   C   6   1
9   C   6   1
10  C   7   2
11  D   7   1
12  D   8   2

Use:

t = df.groupby(['type']).transform(lambda x: x.iloc[0])
df['id'] = df.groupby(['type', 'value'])[['type', 'value']].apply(lambda x: x.name[1]).reset_index().merge(df, on = ['type', 'value'])[0]-t['value']+1

Output:

type    value   id
0   A   1   1
1   A   1   1
2   A   2   2
3   B   3   1
4   B   4   2
5   B   5   3
6   B   5   3
7   B   5   3
8   C   6   1
9   C   6   1
10  C   7   2
11  D   7   1
12  D   8   2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文