python - 添加新列指示 pandas 数据框中的计数

标签 python pandas pyspark

我有一个包含一些复制行的数据框

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),该列指示重复 block 的递增计数( block 是具有相同 item 的一组行) name)以 item 列中的值作为前缀(如果有帮助,复制的 block 将是连续的)

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() 将列 itemh2 中每个组的累计计数连接起来。显然累计计数是从0开始的,偏移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

关于python - 添加新列指示 pandas 数据框中的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64203779/

相关文章:

Python/Pandas - 如何在 Python/Pandas 中连接 2 个带有日期的数组的最佳实践

Python 使用时区偏移量转换日期/时间字符串

python - 如何加快 python 中的数组生成速度?

python - 编写算法以在给定范围内用 Python 生成素数

python - 从 Pandas 到字典,第一列中的值将是键,第二列中的相应值将全部在列表中

python - 在 Spark 数据框中生成可重复的唯一 ID

python - 分块读取大文件,分块压缩和写入

python - 对具有相同名称的行进行分组的最佳方法

apache-spark - StructType 出现意外元组 - 使用架构创建数据框时 pyspark 出错

Pyspark如何合并和分解2个数据框