我正在尝试从Pandas表中删除某些行。本质上,这是一项重复数据删除练习:
我有一张桌子
id sub_id1 sub_id2 date
0 1 424755 101 2018-09-21
1 2 424755 101 2018-09-21
2 3 424755 102 2018-09-21
3 4 678321 101 2018-09-21
4 5 678321 102 2018-09-22
5 6 424755 102 2018-09-22
如果还有另一行与sub_id1
和date
相匹配,但sub_id2
较低,我想删除一行。
我为此编写的SQL是
select * from table t
where not exists (select 1 from table
where sub_id1=t.sub_id1
and date=t.date
and sub_id2<t.sub_id2)
结果表应该是
id sub_id1 sub_id2 date
0 1 424755 101 2018-09-21
1 2 424755 101 2018-09-21
2 4 678321 101 2018-09-21
3 5 678321 102 2018-09-22
4 6 424755 102 2018-09-22
删除id=3
的位置是因为存在与sub_id1
和date列完全相同的行,而其行sub_id2
较低。
试图通过Pandas合并来解决这个问题。谢谢!
答案 0 :(得分:1)
这更像是一个groupby
问题+ min
值切片(我在这里使用transform
min
)
s=df.groupby(['sub_id1','date']).sub_id2.transform('min')
df[df.sub_id2==s]
Out[146]:
id sub_id1 sub_id2 date
0 1 424755 101 2018-09-21
1 2 424755 101 2018-09-21
3 4 678321 101 2018-09-21
4 5 678321 102 2018-09-22
5 6 424755 102 2018-09-22
where sub_id1=t.sub_id1 and date=t.date
:df.groupby(['sub_id1','date'])
sub_id2<t.sub_id2
:df.sub_id2==s
答案 1 :(得分:0)
概述:此代码将对数据集进行分组并找到最小的组合键值
id=[1,2,3,4,5,6]
sub_id1=[424775,424775,424775,678321,678321,424755]
sub_id2=[101,101,102,101,102,102]
date=['2018-09-21','2018-09-21','2018-09-21','2018-09-21','2018-09-21','2018-09-21']
dict={
'id':id,
'sub_id1':sub_id1,
'sub_id2':sub_id2,
'date':date
}
df1=pd.DataFrame(dict,index=id)
df1['date']=pd.to_datetime(df1['date'])
df1.sort_values(['sub_id1','sub_id2'],inplace=True)
#print(df1.info())
#print(df1.keys)
query=df1[df1['date']=='2018-09-21']
#print(query)
#print(df1)
print(df1.groupby(['sub_id1','date'])['sub_id2'].min())