在pandas中合并numpy数组,这样我们就有相同的列长度

xyhw6mcr  于 2023-08-01  发布在  其他
关注(0)|答案(3)|浏览(136)

我有以下numpy数组:

a = np.array([1,2,3])
b = np.array([2,3,4])
c = np.array([1,2,4])

字符串
我希望有一个panda dataframe,这三个数组作为列以如下方式排列:
| B栏|色谱柱C| Column C |
| --|--| ------------ |
| 南|1| 1 |
| 二个|二个| 2 |
| 三个|南| Nan |
| 四|四| 4 |
你能告诉我一个有效的方法吗?谢谢你,谢谢

3duebb1j

3duebb1j1#

将数组转换为具有部分重叠索引的pandas系列,然后将所有系列沿着axis=1

pd.concat([pd.Series(x, index=x) for x in (a, b, c)], axis=1)

个字符

1dkrff03

1dkrff032#

将数组转换为系列,并将其自身作为索引,以受益于索引对齐,以及concat

dic = {'A': a, 'B': b, 'C': c}

df = pd.concat({k: pd.Series(x, index=x)
                for k, x in dic.items()}, 
               axis=1)

字符串
输出量:

A    B    C
1  1.0  NaN  1.0
2  2.0  2.0  2.0
3  3.0  3.0  NaN
4  NaN  4.0  4.0

nkkqxpd9

nkkqxpd93#

另一种可能的解决方案,使用numpy broadcasting

v = np.arange(np.min([a, b, c]), np.max([a, b, c])+1)
m = (v == np.stack([a[:, None], b[:, None], c[:, None]])).any(axis=1)
df = pd.DataFrame(np.tile(v[:, None], 3), columns=list('abc'))
df.where(m.T)

字符串
输出量:

a    b    c
0  1.0  NaN  1.0
1  2.0  2.0  2.0
2  3.0  3.0  NaN
3  NaN  4.0  4.0

相关问题