创建一个 DataFrame,其值作为连接的索引和列名

Make a DataFrame with its values as concatenated index and column names

我想创建一个 pandas DataFrame,其值作为连接的索引和列名。在下面的示例中,我将列名连接到行名;但是,反之亦然。

   A      B      C
A  AA     AB     AC
B  BA     BB     BC
C  CA     CB     CC

Numpy 的 char 模块

我们想在使用字符串特定函数的同时使用 Numpy 的广播。

设置

我使用 ['X', 'Y', 'Z'] 的索引来更清楚地表明我所做的是准确的。

df = pd.DataFrame(index=['X', 'Y', 'Z'], columns=['A', 'B', 'C'])

解决方案

idx = df.index.to_numpy().astype(str)
col = df.columns.to_numpy().astype(str)

df.loc[:, :] = np.char.add(idx[:, None], col)

df

    A   B   C
X  XA  XB  XC
Y  YA  YB  YC
Z  ZA  ZB  ZC

另一种选择是将列列表乘以 df 的长度;然后在 axis=0 上使用 radd 从右边连接索引名称:

df.loc[:,:] = [df.columns.astype(str).tolist()]*df.shape[0]
df = df.radd(df.index.astype(str), axis=0)

或者反过来,索引列表乘以df的宽度;然后在 axis=1 上使用 add 连接列名称:

df.loc[:,:] = list(zip(*[df.index.tolist()]*df.shape[1]))
df = df.add(df.columns, axis=1)

输出:

    A   B   C
A  AA  AB  AC
B  BA  BB  BC
C  CA  CB  CC

对于提供的数据示例,此代码可以解决问题:

df = df.apply(lambda x: x.index + x.name)

>>> df
'''
    A   B   C
A  AA  AB  AC
B  BA  BB  BC
C  CA  CB  CC