定义一个新列,并根据Python中的每个组给出值

2024-10-01 17:25:40 发布

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

“考虑以下数据集:

a    b    c   
e1   21   99  
e1   21   99  
e2   22   99
e3   23   99
e1   23   99
e3   24   99
e4   27   99
e1   25   99
e2   29   99
e4   22   99
e2   23   99

我想在a栏的基础上增加一个新栏,如下所示:

a      b    c    d
e_11   21   99   1
e_11   21   99   1
e_21   22   99   2
e_31   23   99   3
e_11   23   99   1
e_31   24   99   3
e_41   27   99   4
e_11   25   99   1
e_21   29   99   2
e_41   22   99   4
e_21   23   99   2

我需要添加一个新的列d,如果它们属于同一个组,则给出相同的值。 我不知道如何按每组筛选数据,并为每组设置相同的值。 以下是我的代码,但没有给出正确答案:

i=0
e=[]
 for name in df.groupby('a'):
  for j in range(len(name)):

    e.append(i)
 i++

df['d'] = pd.Series(e)
print(df)

Tags: 数据答案代码nameindfforrange
1条回答
网友
1楼 · 发布于 2024-10-01 17:25:40

一次性满足两个需求的一种方法是:

import regex as re

rx = re.compile(r'(?V1)(?<=[a-z])(?=\d+)')
def splitter(row):
    (char, number) = rx.split(row['a'])
    return pd.Series({'a': '{}_{}{}'.format(char, number, number), 'd': number})

df[['a', 'd']] = df.apply(splitter, axis = 1)


使用df.head()产生:
    a       b   c   d
0   e_11    21  99  1
1   e_11    21  99  1
2   e_22    22  99  2
3   e_33    23  99  3
4   e_11    23  99  1


这里的想法是建立一个splitter函数,将字母和数字分开。该函数按行应用并返回新列。您将需要更新的regex模块才能使空拆分工作。

相关问题 更多 >

    热门问题