Pandas:遍历列 index/labels 并将以相同字符串开头的列分组

Pandas: Iterate through columns index/labels and group the ones that starts with the same strings

我想对以相同 str 开头的列 index/labels 进行分组,但我不能使用 str.startswith(),因为如果我必须编写,它将是一个很长的列表每个前缀和组。

所以我想遍历每一列的前缀(格式为 Q[0-9])并将所有相似的前缀组合在一起。

带有一个前缀的示例:

Q1EXAMPLE Q1EXAMPLE1 Q2EXAMPLE2 Q2EXAMPLE3

f1 = [col for col in df if col.startswith('Q1')]

df[f1]
grouped = df.groupby(df.columns.str[:2], axis=1)

将按列名称的前两个字符对列进行分组。

  1. 对于select以正则表达式模式Q[0-9]开头的列,可以使用df.filter()regex=参数,如下:
df2 = df.filter(regex=r'^Q[0-9]')

正则表达式元字符 ^ 表示匹配的文本开头(列标签)

  1. 然后,要创建查找 table(以 Python 字典的形式)来查找每个 Qx 的结果,您可以使用字典理解来遍历 Pandas GroupBy objects of (groups of) column label prefixes by .groupby() on axis=1 on the column label prefixes, 如下:
Q_dict = {col_prefix: df_i for col_prefix, df_i in df2.groupby(df2.columns.str[:2], axis=1)}

演示

  1. 相关栏目选择:
data = {'Col_1': ['a1', 'b1'],
 'Q1EXAMPLE': ['a2', 'b2'],
 'T1Q1': ['a3', 'b3'],
 'Q1EXAMPLE1': ['a4', 'b4'],
 'T1_Q9': ['a5', 'b5'],
 'Q2EXAMPLE2': ['a6', 'b6'],
 'T2EXAMPLE2': ['a7', 'b7'],
 'Q2EXAMPLE3': ['a8', 'b8'],
 'Col_n': ['a9', 'b9']}
df = pd.DataFrame(data)

print(df)

  Col_1 Q1EXAMPLE T1Q1 Q1EXAMPLE1 T1_Q9 Q2EXAMPLE2 T2EXAMPLE2 Q2EXAMPLE3 Col_n
0    a1        a2   a3         a4    a5         a6         a7         a8    a9
1    b1        b2   b3         b4    b5         b6         b7         b8    b9

df2 = df.filter(regex=r'^Q[0-9]')

print(df2)

  Q1EXAMPLE Q1EXAMPLE1 Q2EXAMPLE2 Q2EXAMPLE3
0        a2         a4         a6         a8
1        b2         b4         b6         b8
  1. 使用 Q_dict 访问以特定前缀开头的列子集:
print(Q_dict['Q2'])

    Q2EXAMPLE2  Q2EXAMPLE3
0   a6          a8
1   b6          b8


print(Q_dict['Q1'])

    Q1EXAMPLE   Q1EXAMPLE1
0   a2          a4
1   b2          b4