问题描述
({{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 没有得到任何电话号码。哇!