将索引添加到Pandas系列中的重复项

问题描述

我编写了以下函数,以向一系列重复项添加索引:

({{1) 成为["foo","foo","bar","bar"]

["foo 1","foo 2","foo 3","bar 1","bar 2"]

显然,有一种更好和更清洁的方法可以执行此操作,可能使用Pandas groupby和agg(尽管我不确定它们在使用单个系列而不是df时的表现)。有人可以说明如何做吗?谢谢

解决方法

如果它是一个DataFrame,则可以使用groupby来找到一个累积计数,该累积计数是您要连接到所有字符串的标签,并请注意这些组不必按顺序排列:

df = pd.DataFrame(["foo","foo","bar","foo"],columns=["baz"])
labels = df.groupby("baz").cumcount() + 1
df["baz"] + " " + labels.astype(str)

结果

0    foo 1
1    foo 2
2    bar 1
3    bar 2
4    foo 3
dtype: object

但是,这还会将 1标签添加到任何唯一值。您是否希望这些保持不变?我以为不是,因为您是从 1开始其他人,而不是保持每个组中的第一个不变。

,

如果需要单独出现一次。

['foo','foo','foo','bar','bar','John']

mylist = list(df)
m = map(lambda x: x[1]+ " " + str(mylist[:x[0]].count(x[1]) + 1) if mylist.count(x[1]) > 1 else x[1],enumerate(mylist))
m = list(m)
df = pd.Series(m)
df

输出:

0    foo 1
1    foo 2
2    foo 3
3    bar 1
4    bar 2
5    John
dtype: object

John 没有得到任何电话号码。哇!