csv Pandas:检查值是否存在于另一个表中

kr98yfug  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(153)

我正在处理以太坊欺诈检测数据集,0表示正常,1表示欺诈
我有train_account.csv作为
| 帐目|旗|
| - ------|- ------|
| a17249|无|
| a03683| 1个|
| a22146|无|
transactions.csv作为
| 自_帐户|至_帐户|
| - ------|- ------|
| a00996| b31499|
| a07890| a22146|
| a22146| b31504|
我想创建一个test_account.csv,其中只提供帐户,我们的任务是确定它是欺诈-1还是正常-0
| 帐目|
| - ------|
| 阿27890|
| a03683|
| a22146|
我在制作下表时遵循的规则

  • 如果train_account.csvaccount列中存在一个帐户,则将添加一个标志列,该标志列包含train_account.csv中存在的该帐户的值。如果不存在,则检查该帐户是否存在于交易[“from_account”]或交易[“to_account”]中。如果存在,则在test_account中添加该帐户的标志值,使其为0,否则为1

| 帐目|旗|
| - ------|- ------|
| 阿27890| 1个|
| a03683| 1个|
| a22146|无|
我计划根据上述规则添加一个flag列,而不是添加或删除额外的行
PS:我是初学者,不知道怎么做,提前谢谢
我试着在列中循环,但不知道如何检查并将其添加到结果中。类似于以下内容:

for i in test_account['account']:
    if i in train_account['account']:
        test_account[i]['flag'] = train_account[i]['flag']
    elif i in trasnaction['from_account'] or trasnaction['to_account']:
        test_account[i]['flag'] = 1
    else:
        test_account[i]['flag'] = 0
9avjhtql

9avjhtql1#

试试这个:

import numpy as np
# step 1
train_accounts = train_account['account'].values
test_account['flag'] = np.where(test_account['account'].isin(train_accounts), train_account['flag'], test_account['flag'])
# step 2
accounts = np.append(transactions['from_account'].values,transactions['to_account'].values)
test_account['flag'] = np.where(test_account['account'].isin(accounts), 1, 0)

相关问题