我有一个列名称和ID为pandas的数据框,就像下面的输入数据一样。我想创建一个新的列“ label”,以便如果id小于当前记录的id的记录具有相同的名称值,那么当前记录在label列中将具有与先前记录相同的字母值。如果名称中的值不同,那么我想增加到下一个字母值。我在下面提供了示例输出数据,以说明我正在尝试执行的操作。有谁知道用熊猫或其他方式做到这一点的聪明方法?
输入数据:
name id
cat 0
cat 1
dog 2
frog 3
输出数据:
label name id
A cat 0
A cat 1
B dog 2
C frog 3
答案 0 :(得分:0)
这是一种方法:
from string import ascii_uppercase
from itertools import count
gen_letter = ((c * i for c in ascii_uppercase) for i in count(1))
r = []
for i, t in df.name.eq(df.name.shift()).items():
if t:
r.append(r[i - 1])
else:
r.append(next(gen_letter))
df['label'] = r
此解决方案适用于许多标签,在您完成字母后会变成:“ AA”,“ BB”...。