pandas:如果 headers 包含特定字符串,则加入列

pandas: join columns if their headers contains a specific string

我有一个数据框如下:

import pandas as pd
df = pd.DataFrame({"A_1_a.1": [3],"A_1_a.2": [4],"A_1_a.3": [1],
"A_2_a.1": [2],"A_2_a.2": [3], "A_2_a.3": [7],"A_3_a.1": [4],
"A_3_a.2": [2],"A_3_a.3": [9]})

header 中的第一个数字是 'relation number',每个 header 中的最后一个数字是 'attribute' 数字。我想以具有以下输出的方式加入列。但我不知道如何进行。

期望的输出:

  attribute_num   A_1_a   A_2_a  A_3_a
0     1              3      2      4        
1     2              4      3      2
2     3              1      7      9

我尝试了以下方法,但我知道它 returns 是一个错误

df.groupby(df['A_1_a.1', 'A_1_a.2', 'A_1_a.3', 'A_2_a.1',
          'A_2_a.2', 'A_2_a.3','A_3_a.1', 'A_3_a.2','A_3_a.3'].str[2]).reset_index(name='new')

您可以拆分列索引以创建 MultiIndex 和 stack:

df.columns = pd.MultiIndex.from_arrays(zip(*df.columns.map(lambda x: x.split('.'))))
df.stack(level=1).rename_axis((None, 'attribute_num')).reset_index(level=1)

输出:

  attribute_num  A_1_a  A_2_a  A_3_a
0             1      3      2      4
0             2      4      3      2
0             3      1      7      9