你是如何解决这个问题的?我有30行数组,有列( seq,high,low,statues),目标是合并相似的行,但仅当它们在seq中彼此相邻时。新行将具有最高读数的最大值和最低读数的最小值,并且雕像将与类似行相同。
例如,如果行0的状态为“==”,而行1的状态为“==”,
区块引用
我们不合并它,我们只是把它移到新的列表中。但是,如果第0行和第1行和第2行具有相同的平衡状态,则将新列追加到新列表中,其中seq为1,high = max为2的高值,low为mini为2的low值,以及statues我尝试使用if语句,但如果在arow中有20个有说服力的"balances“,则语句会非常长
序列、高、低、状态
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,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,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.45,44.25,21,44,43,平衡22,43.5,42.25,非23,44.25,42.5,25非平衡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,平衡
发布于 2021-11-19 18:16:49
你是如何解决这个问题的?
一种方法是从数组创建一个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')])https://stackoverflow.com/questions/69968775
复制相似问题