【问题标题】:For rows that have repeated column values, how to create another row with a unique count number for that value对于具有重复列值的行,如何为该值创建具有唯一计数的另一行
【发布时间】: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,因为它往往速度较慢。有没有计算效率更高的方法?

【问题讨论】:

标签: python pandas


【解决方案1】:

试试这个:

df.assign(unique = df.groupby('1').cumcount())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多