如何在熊猫中按日期记录独特的项目

时间:2018-02-06 06:27:13

标签: python pandas

a = [
 ('xyz1','2018-01-30','Error'),
 ('xyz1','2018-01-30','Error'),
 ('xyz1','2018-01-31','OK'),
 ('xyz2','2018-01-31','OK'),
 ('abc123','2018-02-04','Error'),
 ('abc123','2018-02-05','OK'),
 ]

df =pd.DataFrame(a,columns=['sn','date','status'])

print(df.groupby('date').sn.nunique())
date
2018-01-30    1
2018-01-31    2
2018-02-04    1
2018-02-05    1
Name: sn, dtype: int64

print(df.groupby('date').sn.nunique().cumsum())
date
2018-01-30    1
2018-01-31    3
2018-02-04    4
2018-02-05    5
Name: sn, dtype: int64

但实际上,对于开始日期2018-01-30到2018-02-04的日期,它们共有4个唯一的sn:xyz1,xyz2,abc123,所以预期的cumsum值是3,而不是4,所以使用熊猫cumsum不是一个很好的方法。

如何获得我需要的结果? 谢谢!

1 个答案:

答案 0 :(得分:1)

首先,预期4(1 + 2 + 1 = 4)。

要完成任务,您可能需要pandas.Series.duplicated

df['not_dup'] = 1 - df.sn.duplicated()  #Indicator that 'sn' is not duplicated
df.groupby('date').not_dup.sum().cumsum()

输出:

# date
# 2018-01-30    1
# 2018-01-31    2
# 2018-02-04    3
# 2018-02-05    3
# Name: not_dup, dtype: int32