汇总数据帧中的交易链,按列值链接的行

本杰明·伦格莱特

我正在尝试从DataFrame链接多行,以获取通过将接收者ID连接到发送者ID形成的所有可能路径。

这是我的DataFrame的示例:

   transaction_id sender_id receiver_id  amount
0          213234       002         125      10
1          223322       017         354      90
2          343443       125         689      70
3          324433       689         233       5
4          328909       354         456      10

创建于:

df = pd.DataFrame(
    {'transaction_id': {0: '213234', 1: '223322', 2: '343443', 3: '324433', 4: '328909'},
     'sender_id': {0: '002', 1: '017', 2: '125', 3: '689', 4: '354'},
     'receiver_id': {0: '125', 1: '354', 2: '689', 3: '233', 4: '456'},
     'amount': {0: 10, 1: 90, 2: 70, 3: 5, 4: 10}}
)

我的代码的结果应该是链ID列表和交易链的总金额。对于上面示例中的前两行,类似于:

[('002', '125', '689', '233'), 85]
[('017', '354', '456'), 100]

我已经尝试遍历各行并将每行转换为一个Node的实例,然后使用遍历链接列表的方法,但是我不知道下一步是什么:

class Node:
    def __init__(self,transaction_id,sender,receiver,amount):
        self.transac = transaction_id
        self.val = sender_id
        self.next = receiver_id
        self.amount = amount
    def traverse(self):
        node = self # start from the head node
        while node != None:
            print (node.val) # access the node value
            node = node.next # move on to the next node

for index, row in customerTransactionSqlDf3.iterrows():
    index = Node( 
        row["transaction_id"],
        row["sender_id"],
        row["receiver_id"],
        row["amount"]
    )

附加信息:

  • sender_id值是唯一的,对于每个发送者id,只有一个可能的交易链。
  • 没有周期,没有一条链可以使接收者ID指向同一路径中的发送者ID。
迪提示

我不知道下一步是什么

通过使用当前的实现,可以Node通过迭代每个节点来连接两个对象。您还可以visitedNode类中添加属性,以便在遍历树时可以标识唯一的链,即不存在一个链是另一链的子链。但是,如果您想知道每个的链sender_id,则可能没有必要。

编辑:我注意到您提到的预期结果的示例是对于前两行。这意味着每个人都sender_id应该有自己的链。修改traverse方法,以便在所有节点都连接后可以使用它。

编辑:重新实现visited属性以获得唯一的链

df = pd.DataFrame(
    {'transaction_id': {0: '213234', 1: '223322', 2: '343443', 3: '324433', 4: '328909'},
     'sender_id': {0: '002', 1: '017', 2: '125', 3: '689', 4: '354'},
     'receiver_id': {0: '125', 1: '354', 2: '689', 3: '233', 4: '456'},
     'amount': {0: 10, 1: 90, 2: 70, 3: 5, 4: 10}}
)

class Node:
    def __init__(self,transaction_id,sender_id,receiver_id,amount):
        self.transac = transaction_id
        self.sender = sender_id
        self.receiver = receiver_id
        self.next = None
        self.amount = amount
        self.visited = False
    def traverse(self, chain=None, total=0):
        if (self.visited): # undo visited nodes
            return
        self.visited = True
        if chain is None: # this is the beginning of the traversal
            chain = [self.sender]
        chain += [self.receiver]
        total += self.amount
        if self.next is not None:
            return self.next.traverse(chain, total)
        return chain, total

transc = [Node( 
        row["transaction_id"],
        row["sender_id"],
        row["receiver_id"],
        row["amount"]
    ) for i, row in df.iterrows()]

# connect the nodes
for i, v in enumerate(transc):
    for j, k in enumerate(transc):
        # if the receiver v same as the sender from j
        if v.receiver == k.sender:
            v.next = k


summary = [i.traverse() for i in transc]
summary = [i for i in summary if i is not None] # removing None

print(summary)

输出:

[
    (['002', '125', '689', '233'], 85), 
    (['017', '354', '456'], 100)
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R中按组汇总数据帧的所有数字列

来自分类Dev

Python 3.6:创建数据透视表,汇总数据帧中多个列的值计数

来自分类Dev

删除重复的行并汇总数据帧中最后一列的对应值

来自分类Dev

汇总数据帧的备用列

来自分类Dev

多列汇总数据帧

来自分类Dev

在Pig中按两列汇总数据分组

来自分类Dev

按用户汇总数据帧,在首次发生治疗之前为每个用户保留行

来自分类Dev

按KQL中的属性汇总数据

来自分类Dev

汇总数据帧每一列的所有唯一值

来自分类Dev

根据字符串值汇总数据帧

来自分类Dev

汇总数据框中的行

来自分类Dev

R:汇总数据帧,但不同的列

来自分类Dev

汇总数据框中的3列

来自分类Dev

根据其他列的行按组汇总数据表

来自分类Dev

在R上以下类型的数据帧中,按列值汇总行(总和)的最简单方法是什么?

来自分类Dev

[R]中的条件分组和汇总数据帧

来自分类Dev

按组汇总数据

来自分类Dev

分组数据中按窗口大小汇总数据

来自分类Dev

按列号汇总数据框列表

来自分类Dev

如何按多列以“长”格式汇总数据框?

来自分类Dev

在R中按行和按列合并数据帧

来自分类Dev

在R中按周,月等汇总数据

来自分类Dev

如何在FlinkSQL中按周汇总数据组

来自分类Dev

如何在Elasticsearch中按字段汇总数据?

来自分类Dev

根据条件汇总数据帧

来自分类Dev

R从带有时间字段的日期开始按小时汇总数据帧

来自分类Dev

汇总数据框的列

来自分类Dev

在DJANGO模板中汇总数据库中的值

来自分类Dev

从汇总数据中取样