压缩一个数组,其中某些行仅相差一列(到具有唯一行但更多列的行)

Condensing an array where some rows differ only by one column (to one with unique rows but more columns)

我有一个长数组(可以是 pandas 或 numpy,方便的话)其中有些行的前两列相同(x-y 位置),第三列是唯一的(时间),例如:

x     y     t
0.    0.    10.
0.    0.    11.
0.    0.    12.
0.    1.    13.
0.    1.    14.
1.    1.    15.

位置已分组,但每个位置可能列出 1、2 或 3 个时间值,这意味着可能有 1、2 或 3 列具有相同的 x 和 y。该数组需要 reshaped/condensed 这样每个位置都有自己的行,具有时间的最小值和最大值 - 即目标是:

x     y     t1    t2
0.    0.    10.   12.
0.    1.    13.   14.
1.    1.    15.   inf

在 pandas 或 numpy 中有 simple/elegant 方法吗?我试过循环,但它们很乱而且效率极低,我试过使用 np.unique:

target_array = np.unique(initial_array[:, 0:2], axis=0) 

产量

x     y 
0.    0.
0.    1.
1.    1. 

这是一个良好的开端,但后来我坚持生成最后两列。

IIUC,可以用

out = (df.groupby(['x', 'y'])['t']
       .agg(t1='min', t2='max', c='count')
       .reset_index()
       .pipe(lambda df: df.assign(t2=df['t2'].mask(df['c'].eq(1), np.inf)) )
       .drop(columns='c')
       )
print(out)

     x    y    t1    t2
0  0.0  0.0  10.0  12.0
1  0.0  1.0  13.0  14.0
2  1.0  1.0  15.0   inf