我正在尝试将一些代码从Stata过渡到Python。以下代码用于删除相同id
上相同date
变量的重复观测值:
quietly by id date: gen dup = cond(_N==1,0,_n)
drop if id >= 1
以下代码用于生成示例python数据集。上面Stata中的代码所做的是删除重复的观察值。例如,在date
2014-05-01上,id
1具有两次相同的数据,以及date
2014-05-02,id
2等。但是,我只希望数据出现一次。会有人碰巧知道Python中的等效代码吗?
data = {'date': ['2014-05-01', '2014-05-01','2014-05-01','2014-05-01','2014-05-01',
'2014-05-02','2014-05-02','2014-05-02','2014-05-02','2014-05-03',
'2014-05-03','2014-05-03','2014-05-03'],'id':[1, 1, 2, 3, 4, 1, 2,
2, 3, 1, 1, 2, 3],'obs': [10, 10, 5, 7, 3, 2, 4, 4, 3, 8, 8, 6, 11]}
df1 = pd.DataFrame(data, columns = ['date', 'id','obs'])
df1.index = df1['date']
del df1['date']
df1
初始数据
Out[1]:
id obs
date
2014-05-01 1 10
2014-05-01 1 10
2014-05-01 2 5
2014-05-01 3 7
2014-05-01 4 3
2014-05-02 1 2
2014-05-02 2 4
2014-05-02 2 4
2014-05-02 3 3
2014-05-03 1 8
2014-05-03 1 8
2014-05-03 2 6
2014-05-03 3 11
想要的数据
Out[2]:
id obs
date
2014-05-01 1 10
2014-05-01 2 5
2014-05-01 3 7
2014-05-01 4 3
2014-05-02 1 2
2014-05-02 2 4
2014-05-02 3 3
2014-05-03 1 8
2014-05-03 2 6
2014-05-03 3 11
答案 0 :(得分:1)
想法是通过reset_index
从索引创建列,然后将DataFrame.duplicated
与boolean indexing
一起使用,或者通过set_index
创建MultiIndex
并使用Index.duplicated
:
df1 = df1[~df1.reset_index().duplicated(subset=['date','id']).values]
#alternative
#df1 = df1[~df1.set_index('id', append=True).index.duplicated()]
print (df1)
id obs
date
2014-05-01 1 10
2014-05-01 2 5
2014-05-01 3 7
2014-05-01 4 3
2014-05-02 1 2
2014-05-02 2 4
2014-05-02 3 3
2014-05-03 1 8
2014-05-03 2 6
2014-05-03 3 11