【问题标题】:Edit duplicates in pandas dataframe编辑熊猫数据框中的重复项
【发布时间】:2018-10-04 22:23:05
【问题描述】:

我有一个包含节点名称、节点 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)

现在我完全不确定我将如何继续下去。有人可以帮我吗?

【问题讨论】:

  • 相等的行可以不连续吗?
  • 你想如何改变坐标? b 应该比 a 大 10%,c 应该比 b 大 10%?
  • 嗨乔。是的,源/根数据帧的顺序可以是随机的。生成的数据帧也可以是随机的。只有节点名称(a,b,c..) 和坐标的正确关联才能得到保证。嗨@Yuca,在最好的情况下,该方法将计算重叠节点的数量。如果有 5 个节点重叠,则第 3 个节点保持坐标。其中第一个分配有 -20% x,第二个分配 -10%,第四个 +10%,第五个 +20% 等。五个节点的顺序无关紧要(到目前为止)
  • 哦,伙计,工作量太大了,我会给你一个方法来找到 dups,然后你就自己努力吧,哈哈
  • 这可以帮助你找到重复的stackoverflow.com/a/46629549/9754169

标签: python pandas dataframe


【解决方案1】:

尝试以下方法。

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

【讨论】:

    猜你喜欢
    • 2019-09-20
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2018-11-22
    • 2022-11-01
    • 1970-01-01
    相关资源
    最近更新 更多