Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:根据另一列计算累积的唯一值_Python_Loops_Dataframe_Unique - Fatal编程技术网

Python 熊猫:根据另一列计算累积的唯一值

Python 熊猫:根据另一列计算累积的唯一值,python,loops,dataframe,unique,Python,Loops,Dataframe,Unique,我有一个带有ID和日期的简单数据框,如下所示: 'ID Date a 2009/12/1 c 2009/12/1 d 2009/12/1 a 2010/4/1 c 2010/5/1 e 2010/5/1 b 2010/12/1 b 2012/3/1 e 2012/7/1 b 2013/1/1 ... ...' 我需要每个月计算唯一值并进行累积,但不计算

我有一个带有ID和日期的简单数据框,如下所示:

    'ID Date
     a  2009/12/1
     c  2009/12/1
     d  2009/12/1
     a  2010/4/1
     c  2010/5/1
     e  2010/5/1
     b  2010/12/1
     b  2012/3/1
     e  2012/7/1
     b  2013/1/1
    ...
    ...'
我需要每个月计算唯一值并进行累积,但不计算现有ID。比如说

    `2009/12/1 3
     2010/4/1  3
     2010/5/1  4
     ... ...`
我创建了一个循环,但没有工作

       `for d in df['date'].drop_duplicates():
        c=df[df['date']<=d].ID.nunique()
        df2=DataFrame(data=c,index=d)`
`df['date']中的d。删除重复项()

c=df[df['date']您应该使用
groupby()
而不是在数据框上循环。按日期列分组后,您可以使用以下方法计算ID的唯一实例:

df.groupby('Date')['ID'].nunique()
快速示例:

df = pd.DataFrame([['a' ,'2009/12/1'],
                   ['c' ,'2009/12/1'],
                   ['d' ,'2009/12/1'],
                   ['c' ,'2009/12/1'],
                   ['a' ,'2010/4/1'],
                   ['c' ,'2010/5/1'],
                   ['e' ,'2010/5/1']], columns = ['ID','Date'])

df.groupby('Date')['ID'].nunique()
# returns:
# Date
# 2009/12/1    3
# 2010/4/1     1
# 2010/5/1     2

一个选项是编写for循环并使用集合保存累积唯一ID:

cumcount = []
cumunique = set()
date = []
for k, g in df.groupby(pd.to_datetime(df.Date)):
    cumunique |= set(g.ID)                  # hold cumulative unique IDs
    date.append(g.Date.iat[0])              # get the date variable for each group
    cumcount.append(len(cumunique))         # hold cumulative count of unique IDs

pd.DataFrame({"Date": date, "ID": cumcount})

因此,如果
a
在同一个月内出现两次,则只计算一次,对吗?此外,您的所有日期都列为该月的第一个日期吗?我需要计算从最早日期到当前的唯一ID。按组计算该期间的唯一ID,这无法满足我的需要谢谢您的代码。我现在无法尝试,但请继续ems它会工作的。实际上我还是Python新手,你能给我一些关于“set”的信息吗?它工作,非常感谢。但是理解“set”仍然很好