根据先前记录中的匹配值创建新的pandas列

时间:2020-03-26 22:41:36

标签: python-3.x pandas list for-loop

我有一个列名称和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

1 个答案:

答案 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

enter image description here

此解决方案适用于许多标签,在您完成字母后会变成:“ AA”,“ BB”...。