【问题标题】:how to merge adjacent NumPy rows that have similar last column value into new row?如何将具有相似最后一列值的相邻 NumPy 行合并到新行中?
【发布时间】:2021-12-26 07:52:40
【问题描述】:

``你如何解决这个问题? 我有 30 行数组,其中包含列(序列、高、低、雕像),目标是合并相似的行,但前提是它们在序列中彼此相邻。 新行将具有最高读数的最大值和最低读数的最小值,并且雕像将与相似行的相同。

例如,如果第 0 行雕像 == “平衡”,第 1 行雕像 == “不平衡”,

块引用

我们不合并它,我们只是将它移动到新列表中。 但是如果第 0 行和第 1 行和第 2 行具有相同的平衡状态,则将新列附加到具有 seq 1 的新列表中,高 = 2 高值的最大值,低 = 2 低值的最小值,和状态 我尝试使用 if 语句,但如果我连续有 20 个令人信服的“余额”,这是很长的语句


序列,高,低,状态

0,55,53,平衡

1,53.75,51,不平衡

2,52.5,51.25,平衡

3,53,50.5,平衡

4,51.5,49.75,平衡 5,51,49.25,不平衡 6,50.25,49.25,不平衡 7,49.25,48.75,不平衡 8,48.75,47.25,平衡 9,47.5,45.25,平衡 10,47,46,不平衡 11,46.75,44,平衡 12,45.25,43.75,不平衡 13,44.25,42.25,不平衡 14,42.75,41.5,平衡 15,44.25,42.5,平衡 16,44.25,42.25,不平衡 17,46,43.5,平衡 18,46.75,45.25,不平衡 19,46.25,45,平衡 20,46.5,44.25,平衡 21,44,43,平衡 22,43.5,42.25,不平衡 23,44.25,42.5,不平衡 24,43.75,41.5,平衡 25,41.5,39.5,不平衡 26,42.5,40.25,不平衡 27,42.75,40.75,不平衡 28,43.75,41.75,平衡 29,42,39.5,平衡 30,40.5,39.25,平衡

这是所需的输出 序列,高,低,状态 0,55,53,平衡 1,53.75,51,不平衡 3,53,49.75,平衡 4,51,48.75,不平衡 5,48.75,45.25,平衡 6,47,46,不平衡 7,46.75,44,平衡 8,45.25,42.25,不平衡 9,44.25,51.5,平衡 10,44.25,42.25,不平衡 11,46,43.5,平衡 12,46.75,45.25,不平衡 13,46.5,43,平衡 14,44.25,42.25,不平衡 15,43.75,41.5,平衡 16,42.75,39.5,不平衡 17、43.75、39.25,平衡

original data what i am hopping to get

【问题讨论】:

  • 你写 如果第 0 行和第 1 行和第 2 行具有相同的状态......,然后追加新列...... 2 个高值的最大值,...... 2 个低值的最小值 - 但第 0、1 和 2 行给出的不是 2,而是 3 个高值和低值。您应该更正这种不一致(与第 4 版之前一样)。
  • 为什么在 我希望得到的 seq 2 丢失?

标签: python numpy numpy-ndarray


【解决方案1】:

你是怎么解决这个问题的?

一种方法是从数组中创建一个 DataFrame(比如 df),然后使用 itertools.groupby 合并具有相同状态的行。

from itertools import groupby
d = [(lambda dfr: (max(dfr['high']), min(dfr['low']), s))(pandas.DataFrame(list(r)))
     for s, r in groupby(df.itertuples(False), lambda a: a.statuse)]
# if you want a NumPy array:
a = np.array(d, dtype=[('high','f'),('low','f'),('statuse','O')])

【讨论】:

  • 非常感谢,我实际上放弃了这个问题,谢谢。我什至没有检查它是否真的有效,但我想我先谢谢你。
  • 工作完全像我需要做的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-26
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2021-07-22
相关资源
最近更新 更多