我有一个表,其中包含节点名称,节点x坐标和节点y坐标。 其中一些包含相同的x和y坐标。 我想以类似于散点图的方法绘制此表,以可视化节点方案。为此,我不希望节点(具有相同的x&y)在图中相互覆盖,因为这不利于类似方案的表示。因此,我想将x坐标更改为彼此相邻放置。
示例:
a, 10, 30
b, 10, 30
c, 10, 30
d, 50, 80
e, 90, 60
f, 100, 20
g, 120, 40
h, 120, 40
i, 120, 40
节点a,b和c将彼此重叠。将它们的x坐标相差10%,例如,请参见所附图片。
我的第一步是将结果取整并通过以下方式获得可能的重复项:
pd.concat(g for _, g in df.groupby("x") if len(g) >1)
现在我完全不确定该如何进行。有人可以帮我吗?
答案 0 :(得分:0)
尝试以下方法。
def adjust(x):
# create a list of numbers to multiply (adjust)
# the original data by
if not len(x) % 2:
r = range(-(len(x)//2), (len(x)//2))
else:
r = range(-(len(x)//2), (len(x)//2)+1)
mult = list(map(lambda x: 1+x/10, r))
return x*mult
# find all duplicates
dup = df.duplicated(subset='x', keep=False)
# update the values of duplicates using the above function
df.loc[dup, 'x'] = df[dup].groupby('x').x.apply(adjust)
示例:
输入数据:
a, 10, 30
b, 10, 30
c, 10, 30
d, 50, 80
e, 90, 60
f, 100, 20
g, 120, 40
h, 120, 40
i, 120, 40
输出数据框:
node x y
0 a 9.0 30
1 b 10.0 30
2 c 11.0 30
3 d 50.0 80
4 e 90.0 60
5 f 100.0 20
6 g 96.0 40
7 h 108.0 40
8 i 120.0 40
9 j 132.0 40
10 k 144.0 40