如何基于数据帧的其他列创建新的列?

2024-03-29 15:00:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下几点建议:

  id1      id2     id3(expected_col)
   21       4          21a
   21       4          21a
   21       4          21a 
   21       5          21b
   22       6          22a
   22       6          22a
   22       6          22a
   23       7          23a
   23       7          23a
   23       8          23b
   23       9          23c 

有两个列-id1和id2,我想创建一个新的列来生成id3,这是前面两个列的组合。你知道吗

整数部分与id1列相同,但我想添加字符串,每当id2发生变化时,该字符串就会发生变化,然后每当遇到新的id1时,字母循环就会以“a”开始。你知道吗

因此,也许我们可以通过id1执行其余的操作,但我不知道如何为新列生成字符串字母表。在上面的df中,id3是我期望的结果列。你知道吗

如果有什么不清楚的请告诉我。你知道吗


Tags: 字符串df字母col整数建议字母表expected
1条回答
网友
1楼 · 发布于 2024-03-29 15:00:38

使用GroupBy Apply方法,在“id2”上的组级别使用^{}^{}^{}来确定更改,然后映射到^{}字母。你知道吗

from string import ascii_lowercase

def combine_ids(grp, letters):
    grp = grp.ne(grp.shift()).cumsum() - 1
    return str(grp.name) + grp.map(letters)

letters = pd.Series(list(ascii_lowercase))
df['id3'] = df.groupby('id1')['id2'].apply(combine_ids, letters)

以上假设您最多只需要26个字母即可附加。如果您需要更多,可以使用类似于下面的过程添加重复的字母“aa”-“zz”:

from itertools import product
from string import ascii_lowercase

doubles = map(''.join, product(ascii_lowercase, repeat=2))
letters = pd.Series(list(ascii_lowercase) + list(doubles))

结果输出:

    id1  id2  id3
0    21    4  21a
1    21    4  21a
2    21    4  21a
3    21    5  21b
4    22    6  22a
5    22    6  22a
6    22    6  22a
7    23    7  23a
8    23    7  23a
9    23    8  23b
10   23    9  23c

相关问题 更多 >