2016-05-08 29 views
5

Tôi có dataframe sau:gấu trúc: thả bản sao trong groupby 'date'

url='https://raw.githubusercontent.com/108michael/ms_thesis/master/crsp.dime.mpl.df' 

df=pd.read_csv(url) 

df.groupby('date').cid.size() 

date 
2005  7 
2006  237 
2007 3610 
2008 1318 
2009 2664 
2010  997 
2011 6390 
2012 2904 
2013 7875 
2014 3979 

df.groupby('date').cid.nunique() 

date 
2005  3 
2006  10 
2007 227 
2008  52 
2009 142 
2010  57 
2011 219 
2012  99 
2013 238 
2014 146 
Name: cid, dtype: int64 

Tôi muốn loại bỏ cid giá trị nhân bản như vậy mà sản lượng từ df.groupby('date').cid.size() phù hợp với sản lượng từ df.groupby('date').cid.nunique(). Tôi đã xem xét điều này post nhưng nó dường như không có một giải pháp vững chắc cho vấn đề.

Tôi đã thử những điều sau đây:

df.groupby([df['date']]).drop_duplicates(cols='cid') 

Nhưng tôi nhận được lỗi này:

AttributeError: Cannot access callable attribute 'drop_duplicates' of 'DataFrameGroupBy' objects, try using the 'apply' method 

và điều này:

df.groupby(('date').drop_duplicates('cid')) 

Nhưng tôi nhận được lỗi này:

AttributeError: 'str' object has no attribute 'drop_duplicates' 

Có ai có ý tưởng về điều này không?

Trả lời

11

Bạn không cần groupby để thả bản sao dựa trên một vài cột, bạn có thể chỉ định một tập hợp con thay vì:

df2 = df.drop_duplicates(["date", "cid"]) 
df2.groupby('date').cid.size() 
Out[99]: 
date 
2005  3 
2006  10 
2007 227 
2008  52 
2009 142 
2010  57 
2011 219 
2012  99 
2013 238 
2014 146 
dtype: int64 
+0

Cảm ơn bạn đã cho ý kiến! Vâng, điều đó đã hiệu quả! Tôi tự hỏi về một số loại tập hợp con. –

+1

Bạn được chào đón. Điều này hoạt động chủ yếu bởi vì nhóm vào ngày và tìm kiếm các hàng có cùng một cid trong mỗi nhóm giống như tìm kiếm các hàng trong khung dữ liệu chính có cùng ngày và cid. – ayhan

Các vấn đề liên quan