PANDAS:包含用户之间以前事务的列



我有一个这样结构的数据框架

df = pd.DataFrame([
(1000, 'Frank', 'Hugo'),
(100, 'Peter', 'Frank'),
(10000, 'Hugo', 'James'),
(300, 'James', 'Jennifer'),
(250, 'Frank', 'Hugo'),
(550, 'Peter', 'Frank'),
(10000, 'Frank', 'Hugo')
], columns=['Amount', 'Payer', 'Payee'])

并且,基于数据框中包含的信息(大约2M行),我应该创建一个列,其中包含付款人之前对同一收款人进行了多少笔交易的信息。最终目标应该是在两个用户之间的每个新事务上放置一个标志。我应该得到这样的输出:

df = pd.DataFrame([
(1000, 'Frank', 'Hugo', 0),
(100, 'Peter', 'Frank', 0),
(10000, 'Hugo', 'James', 0),
(300, 'James', 'Jennifer', 0),
(250, 'Frank', 'Hugo', 1),
(550, 'Peter', 'Frank', 1),
(10000, 'Frank', 'Hugo', 2)
], columns=['Amount', 'Payer', 'Payee', 'Previous_transactions'])

我真的想不明白,我只是被卡住了

count = df['Payee'].groupby(df['Payer']).value_counts()

,但我觉得我离解决方案很远,因为这只生成一个不同长度的列表。

您可以使用cumcount:

df['Previous_transactions']=df.groupby(['Payer','Payee']).cumcount()
'''
|    |   Amount | Payer   | Payee    |   x |   Previous_transactions |
|---:|---------:|:--------|:---------|----:|------------------------:|
|  0 |     1000 | Frank   | Hugo     |   0 |                       0 |
|  1 |      100 | Peter   | Frank    |   0 |                       0 |
|  2 |    10000 | Hugo    | James    |   0 |                       0 |
|  3 |      300 | James   | Jennifer |   0 |                       0 |
|  4 |      250 | Frank   | Hugo     |   1 |                       1 |
|  5 |      550 | Peter   | Frank    |   1 |                       1 |
|  6 |    10000 | Frank   | Hugo     |   2 |                       2 |
'''

最新更新