python PANDAS:包含用户之间先前事务处理的列

dm7nw8vv  于 2022-12-10  发布在  Python
关注(0)|答案(2)|浏览(120)

我有一个结构如下的 Dataframe

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'])

而且,根据 Dataframe 中包含的信息(大约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()

但我觉得我离解决方案还很远,因为这只会生成一个不同长度的列表。
非常感谢:)

2vuwiymt

2vuwiymt1#

# Group the data by payer and payee and sort the values by the amount
df = df.groupby(['Payer', 'Payee']).sort_values('Amount')

# Shift the values in the 'Amount' column by 1 to get the previous number of transactions
df['Previous_transactions'] = df['Amount'].shift(1)

# Drop the rows with missing values
df.dropna(inplace=True)

# Reset the index
df.reset_index(drop=True, inplace=True)
sh7euo9m

sh7euo9m2#

您可以使用**cumcount:**

df['Previous_transactions']=df.groupby('Payer').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 |
'''

相关问题