我有一个像这样的数据框:
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/