我有一个这样结构的数据框架
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 |
'''