根据表中其他列的值计数,添加带有数字的列

2024-10-03 02:48:37 发布

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

colA是我目前拥有的

但是,我正在尝试生成colB

我希望colB包含每个值的数字001。但是,如果关联的colA值在该列中存在两次,则我希望colB编号为002,依此类推

希望下面的示例能够更好地了解我在基于colA值寻找什么。我一直在努力拼凑任何真正的代码

编辑:努力用文字来解释这一点,所以如果你能想出更好的解释方法,请随时更新我的问题

colA   colB
BJ02   001
BJ02   002
CJ02   001
CJ03   001
CJ02   002
DJ01   001
DJ02   001
DJ07   001
DJ07   002
DJ07   003

Tags: 方法代码编辑示例数字编号文字colb
2条回答

使用groupby_cumcount

df['colB'] = df.groupby('colA').cumcount().add(1)
print(df)

# Output
   colA  colB
0  BJ02     1
1  BJ02     2
2  CJ02     1
3  CJ03     1
4  CJ02     2
5  DJ01     1
6  DJ02     1
7  DJ07     1
8  DJ07     2
9  DJ07     3

@HenryEcker建议使用zfill

df['colB'] = df.groupby('colA').cumcount().add(1).astype(str).str.zfill(3)
print(df)

# Output:
   colA colB
0  BJ02  001
1  BJ02  002
2  CJ02  001
3  CJ03  001
4  CJ02  002
5  DJ01  001
6  DJ02  001
7  DJ07  001
8  DJ07  002
9  DJ07  003

可以使用Counter()计算colA中每个值的频率,然后创建一个函数来生成colB的值列表

from collections import Counter    
def count_value(colA):
     new_col = []
     colA = df[colA].tolist()
     freq_table = Counter(colA) # count the frequency of each value
     for value in colA:
          new_col.append('00' + str(freq_table[value]))
     return new_col
df['colB'] = count_value(df['colA'])

相关问题 更多 >