如何在另一列上创建具有基于时间的约束的列?

2024-10-03 21:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据帧,只有2categories A and B。每行中的每个名称都可以与它们中的任何一个相关联。当名称再次出现时,我需要另外两列来指示该名称在该名称的最后5个事务中的category Acategory B计数。如果在此之前有少于5个事务,那么输出应该是"-1"。因此,我通过对名称排序,然后对到期日期排序,将数据框聚集在名称上,但不确定如何进一步处理。你知道吗

Document Number   Date Due  Name    Category
    21175370      9/20/17   Max        A
    20762835      8/20/17   Max        A
    21134931      8/25/17   Emily      B
    20784776      8/19/17   John       A
    20874477      8/4/17    Doe        B
    20874568      8/4/17    Doe        B
    20874575      8/4/17    Doe        B
    19784032      5/9/17    Doe        B
    19980723      5/25/17   Doe        B
    20833755      9/16/17   Doe        A

输出如下所示:

Document Number   Date Due  Name    Category  Category_A_Count  Category_B_Count
    21175370      9/20/17   Max        A              -1              -1
    20762835      8/20/17   Max        A              -1              -1
    21134931      8/25/17   Emily      B              -1              -1 
    20784776      8/19/17   Doe        A              -1              -1
    20874477      8/4/17    Doe        B              -1              -1
    20874568      8/4/17    Doe        B              -1              -1
    20874575      8/4/17    Doe        B              -1              -1
    19784032      5/9/17    Doe        B              -1              -1
    19980723      5/25/17   Doe        B               1              4
    20833755      9/16/17   Doe        A               0              5

我尝试了一些方法,将pandas数据框改为list,这样就可以了,但是如何在pandas中实现呢?地址:

vendorList = list(vendorLast5["Name"])
cat = list(vendorLast5["Category"])
print type(vendorList)
catA = [-1, -1, -1, -1]
catB = [-1, -1, -1, -1]
for i in range(0, len(vendorList)):
    if(i > 4):
        countA = 0
        countB = 0
        for j in range(i-5, i):
            if(vendorList[j] != vendorList[i]):
                countA = -1
                countB = -1
                break
            if(cat[j] == "A"):
                countA = countA+1
            else:
                countB=countB+1
        catA.append(countA)
        catB.append(countB)

Tags: 数据name名称if排序事务documentmax