我有一个表(程序的简化输出),需要过滤:
id hit from to value
A hit1 56 102 0.00085
B hit2 89 275 0.00034
B hit3 240 349 0.00034
C hit4 332 480 3.40E-15
D hit5 291 512 3.80E-24
D hit6 287 313 0.00098
D hit7 381 426 0.00098
D hit8 287 316 0.0029
D hit9 373 422 0.0029
D hit10 514 600 0.0021对于每个id,df应该按照from进行排序,如果有重叠的点击,则保持较低的value。
到目前为止,这是我的代码,它首先由from启动,然后由value启动
import pandas
df = pandas.read_csv("table", sep='\s+', names=["id", "hit", "from", "to", "value"])
df.sort_values(['from', "value"]).groupby('id')但是,如何检查重叠(from到to) &删除得分较高的重叠?
这是我的预期输出:
id hit from to valu
A hit1 56 102 0.00085
C hit4 332 480 3.40E-15
D hit5 291 512 3.80E-24
D hit10 514 600 0.0021请注意,id B有两个相同值的重叠命中,因此这两个条目都将被踢出。
发布于 2019-04-16 11:17:12
如果您不介意代码中的多行代码,那么这样的代码应该可以工作,我想.(这里是python新手.) 来源
df.sort_values(['from', "value"]).groupby('id')
df.drop_duplicates(subset=['id', 'value'], keep=False, inplace=True)参数设置为false,因为您根本不想要重复的行。
,其结果是:
id hit from to value
0 A hit1 56 102 0.00085
3 C hit4 332 480 3.40E-15
4 D hit5 291 512 3.80E-24
9 D hit10 514 600 0.0021和要摆脱混乱的索引列:
df.reset_index(drop=True, inplace=True),其结果是:
id hit from to value
0 A hit1 56 102 0.00085
1 C hit4 332 480 3.40E-15
2 D hit5 291 512 3.80E-24
3 D hit10 514 600 0.0021PS:这是我第一次给出答案,所以请温柔一点。而且我还在学英语。
https://stackoverflow.com/questions/54969074
复制相似问题