在pandas数据帧中添加表示计数的新列



我有一个带有一些复制行的数据帧

item h2 h3  h4
----------------
foo  v1 ... ...
foo  v2 ... ...
foo  v1 ... ...
foo  v2 ... ...
foo  v1 ... ...
foo  v2 ... ...
foo  v1 ... ...
foo  v2 ... ...
bar  v5 ... ...
bar  v6 ... ...
bar  v7 ... ...
bar  v5 ... ...
bar  v6 ... ...
bar  v7 ... ...

我的目标是在这个数据帧中添加一列(new_id(,它指示重复块(块是一组具有相同item名称的行(的递增计数,前缀是item列中的值(如果有帮助,复制的块将是连续的(

item h2 h3  h4   new_id
-----------------------
foo  v1 ... ...  foo1
foo  v2 ... ...  foo1
foo  v1 ... ...  foo2
foo  v2 ... ...  foo2
foo  v1 ... ...  foo3
foo  v2 ... ...  foo3
foo  v1 ... ...  foo4
foo  v2 ... ...  foo4
bar  v5 ... ...  bar1
bar  v6 ... ...  bar1
bar  v7 ... ...  bar1
bar  v5 ... ...  bar2
bar  v6 ... ...  bar2
bar  v7 ... ...  bar2

关于如何做到这一点的建议?

使用str.cat()item列与h2中各组的累积计数连接起来。显然,累积计数从零开始,将其偏移1

df.item.str.cat((df.groupby('h2').cumcount()+1).astype(str),sep='')

item  h2   h3   h4 new_id
0   foo  v1  ...  ...   foo1
1   foo  v2  ...  ...   foo1
2   foo  v1  ...  ...   foo2
3   foo  v2  ...  ...   foo2
4   foo  v1  ...  ...   foo3
5   foo  v2  ...  ...   foo3
6   foo  v1  ...  ...   foo4
7   foo  v2  ...  ...   foo4
8   bar  v5  ...  ...   bar1
9   bar  v6  ...  ...   bar1
10  bar  v7  ...  ...   bar1
11  bar  v5  ...  ...   bar2
12  bar  v6  ...  ...   bar2
13  bar  v7  ...  ...   bar2

通过列itemh2:使用GroupBy.cumcount

df['new_id'] = df['item'] + '_' + df.groupby(['item','h2']).cumcount().add(1).astype(str)
print (df)
item  h2   h3   h4 new_id
0   foo  v1  ...  ...  foo_1
1   foo  v2  ...  ...  foo_1
2   foo  v1  ...  ...  foo_2
3   foo  v2  ...  ...  foo_2
4   foo  v1  ...  ...  foo_3
5   foo  v2  ...  ...  foo_3
6   foo  v1  ...  ...  foo_4
7   foo  v2  ...  ...  foo_4
8   bar  v5  ...  ...  bar_1
9   bar  v6  ...  ...  bar_1
10  bar  v7  ...  ...  bar_1
11  bar  v5  ...  ...  bar_2
12  bar  v6  ...  ...  bar_2
13  bar  v7  ...  ...  bar_2

最新更新