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
我有一个数据框如下:
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