在熊猫数据框中编辑重复项

时间:2018-10-04 12:25:52

标签: python pandas dataframe

我有一个表,其中包含节点名称,节点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%,例如,请参见所附图片。

Scheme

我的第一步是将结果取整并通过以下方式获得可能的重复项:

pd.concat(g for _, g in df.groupby("x") if len(g) >1)

现在我完全不确定该如何进行。有人可以帮我吗?

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