交织两个数据帧

2024-04-25 11:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两个数据帧d1和{}

d1 = pd.DataFrame(np.ones((3, 3), dtype=int), list('abc'), [0, 1, 2])
d2 = pd.DataFrame(np.zeros((3, 2), dtype=int), list('abc'), [3, 4])

^{pr2}$
d2

   3  4
a  0  0
b  0  0
c  0  0

什么是一种简单而通用的方法来交织两个数据帧的列。我们可以假设d2中的列数总是比d1中的列数少1。而且,这些指数是一样的。在

我想要这个:

pd.concat([d1[0], d2[3], d1[1], d2[4], d1[2]], axis=1)

   0  3  1  4  2
a  1  0  1  0  1
b  1  0  1  0  1
c  1  0  1  0  1

Tags: 数据方法dataframenponeszeroslistint
3条回答

这里有一个新方法-

def numpy_interweave(d1, d2):
    c1 = list(d1.columns)
    c2 = list(d2.columns)
    N = (len(c1)+len(c2))
    cols = [None]*N
    cols[::2] = c1
    cols[1::2] = c2

    out_dtype = np.result_type(d1.values.dtype, d2.values.dtype)
    out = np.empty((d1.shape[0],N),dtype=out_dtype)
    out[:,::2] = d1.values
    out[:,1::2] = d2.values

    df_out = pd.DataFrame(out, columns=cols, index=d1.index)
    return df_out

样本运行-

^{pr2}$

纵横交错:

c = np.empty((d1.columns.size + d2.columns.size,), dtype=object)
c[0::2], c[1::2] = d1.columns, d2.columns

现在,使用布尔索引进行联接并重新排序:

^{pr2}$

在处理多个数据帧时,您可能更喜欢pd.concat。在

使用^{}组合数据帧,^{}对列重新排序:

from toolz import interleave

pd.concat([d1, d2], axis=1)[list(interleave([d1, d2]))]

结果与预期一致:

^{pr2}$

相关问题 更多 >