【发布时间】:2021-10-28 20:50:53
【问题描述】:
假设我有一个包含重复列值的数据框
data = {'1':[1, 1, 1, 2, 2, 3, 4, 4, 4, 4]}
df = pd.DataFrame(data)
df.head(10)
1
0 1
1 1
2 1
3 2
4 2
5 3
6 4
7 4
8 4
9 4
我将如何创建另一列,该列具有唯一的计数值,以表示该值之前出现的次数,向上或向下行。
这是一个期望结果的示例
1 uniquee
0 1 0
1 1 1
2 1 2
3 2 0
4 2 1
5 3 0
6 4 0
7 4 1
8 4 2
9 4 3
往下看,对于具有重复值的“1”列的列值,“唯一”列包含一个整数,表示该值之前出现的次数。
我想出的一个解决方案是使用 iterrows
seen_set = {}
df['uniquee'] = ''
for index, row in df.iterrows():
if row['1'] not in seen_set:
seen_set[row['1']] = 0
else:
seen_set[row['1']] += 1
df.loc[index , 'uniquee'] = seen_set[row['1']]
但通常不鼓励使用 iterrows,因为它往往速度较慢。有没有计算效率更高的方法?
【问题讨论】:
-
@ThePyGuy 它并不总是排序