python - 根据数据帧中值的重复创建计数器

标签 python counter repeat

我有一个像这样的数据框:

ID   day purchase
ID1  1   10  
ID1  2   15 
ID1  4   13
ID2  2   11
ID2  4   11
ID2  5   24
ID2  6   10 

期望的输出:

ID   day purchase Txn
ID1  1   10       1
ID1  2   15       2 
ID1  4   13       3 
ID2  2   11       1  
ID2  4   11       2
ID2  5   24       3 
ID2  6   10       4

因此,对于每个 ID,我想创建一个计数器来跟踪他们的交易。在 SAS 中,我会执行类似 First.ID then Txn=1 else Txn+1 的操作

如何在 Python 中执行类似的操作?

我想到了按 ID 和日期排序。但如何创建定制计数器呢?

最佳答案

这是一种解决方案。正如您所建议的,它涉及按 ID 和日期排序(如果您的原始数据帧不是),然后按 ID 分组,为每个 ID 创建一个计数器:

# Make sure your dataframe is sorted properly (first by ID, then by day)
df = df.sort_values(['ID', 'day'])

# group by ID
by_id = df.groupby('ID')

# Make a custom counter using the default index of dataframes (adding 1)
df['txn'] = by_id.apply(lambda x: x.reset_index()).index.get_level_values(1)+1

>>> df
    ID  day  purchase  txn
0  ID1    1        10    1
1  ID1    2        15    2
2  ID1    4        13    3
3  ID2    2        11    1
4  ID2    4        11    2
5  ID2    5        24    3
6  ID2    6        10    4

如果您的数据框一开始没有正确排序,您可以像这样恢复到原始顺序:

df = df.sort_index()

关于python - 根据数据帧中值的重复创建计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49174727/

相关文章:

python - 让 SetupTools/easy_install 知道已安装的 Debian 软件包?

C 中的计数器问题和段错误(核心转储)

python - 如何使用 Python 比较两个 Excel 工作表的元素并向前一个工作表添加新计数和元素

安卓图片背景重复

python - 查询集过滤器 : retrieve manytomany field as list of each object

python - 反序列化棉花糖中的嵌套字段

C 计数器意外重置

bash - 如何在 bash 中多次重复几个字符?

c - 我怎样才能让这段代码重复主要功能

python - 使用 numpy 进行网格分布