我有一个如下所示的 Pandas 数据框:
ID start end name
0 1 119 200 ss
1 1 118 156 ss
2. 1 110 200 ss
3 1 15 25 me
4 4 30 40 gg
5 4 30 55 gg
我想要做的是合并具有相同名称(名称列)且其坐标(开始,结束)重叠的重叠间隔。因此生成的数据框将如下所示:
ID start end name
0 1 110 200 ss
1 1 15 25 me
2 4 30 55 gg
例如对于 ss 在 name 列中,最低起始值为 110,最高结束值为 200。因此,新数据帧的起始值为 110,结束值为 200。我怎样才能做到这一点?将不胜感激。
答案 0 :(得分:3)
从这里开始
ID start end name
0.0 1 119 200 ss
1.0 1 118 156 ss
2.0 1 110 200 ss
3.0 1 15 25 me
4.0 4 30 40 gg
5.0 4 30 55 gg
我们可以分组并聚合最小值和最大值。对于我们只想保持相同值的那些,我们可以使用 min 来抓取第一个。
df.groupby('name').agg({'ID': min, 'start': min, 'end': max, 'name': min})
结果
ID start end name
name
gg 4 30 55 gg
me 1 15 25 me
ss 1 110 200 ss
答案 1 :(得分:2)
如果可能,通过聚合 min
和 max
每 name
和 ID
列简化输出,在输出使用中具有相同的组顺序和相同的列顺序:
df1 = (df.groupby(['name', 'ID'], sort=False, as_index=False)
.agg({'start': min, 'end': max})
.reindex(df.columns, axis=1))
print (df1)
ID start end name
0 1 110 200 ss
1 1 15 25 me
2 4 30 55 gg