Python中Stata-drop-duplicates代码的等价性

2024-05-23 19:29:18 发布

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

我正在尝试将一些代码从Stata转换到Python。以下代码用于将相同id变量的重复观测值放到相同date上:

quietly by id date: gen dup = cond(_N==1,0,_n) 
drop if id >= 1

下面的代码用于生成一个示例python数据集。Stata中的上述代码所做的是删除重复的观察值。例如,在date2014-05-01,id1有两次相同的数据,以及date2014-05-02,id2等。但是,我只希望数据出现一次。会不会有人碰巧知道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

Tags: 数据代码iddatadatebyoutgen
1条回答
网友
1楼 · 发布于 2024-05-23 19:29:18

想法是通过^{}从索引创建列,然后将^{}^{}一起使用,或者通过^{}创建MultiIndex,然后使用^{}

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

相关问题 更多 >