熊猫查找带有通配符名称的列

时间:2019-07-12 19:08:51

标签: pandas

我有一个熊猫数据框,其列名称如下:

id ColNameOrig_x ColNameOrig_y

有许多这样的列,之所以出现'x'和'y'是因为合并了两个具有相似列名的数据集。 我需要做什么:

df.ColName = df.ColNameOrig_x + df.ColNameOrig_y

我现在手动对许多列(接近50)重复此行,是否有通配符方式?

2 个答案:

答案 0 :(得分:1)

您可以使用下标语法动态访问列名称:

col_groups = ['ColName1', 'ColName2']
for grp in col_groups:
    df[grp] = df[f'{grp}Orig_x'] + df[f'{grp}Orig_y']

或者您可以按列组进行汇总。例如

df = pd.DataFrame([
    [1,2,3,4],
    [5,6,7,8]
], columns=['ColName1Orig_x', 'ColName1Orig_y', 'ColName2Orig_x', 'ColName2Orig_y'])

# Here's your opportunity to define the wildcard
col_groups = df.columns.str.extract('(.+)Orig_[x|y]')[0]

df.columns = [col_groups, df.columns]
df.groupby(level=0, axis=1).sum()

输入:

ColName1Orig_x  ColName1Orig_y  ColName2Orig_x  ColName2Orig_y
             1               2               3               4
             5               6               7               8

输出:

ColName1  ColName2
       3         7
      11        15

答案 1 :(得分:1)

您可以将DataFrame.filterDataFrame.groupby配合使用lambda函数,并可以将axis=1与汇总的sum一起按列名称分组,也可以将Series.str.split之类的文本函数与索引一起使用:

df1 = df.filter(like='_').groupby(lambda x: x.split('_')[0], axis=1).sum()
print (df1)
   ColName1Orig  ColName2Orig
0             3             7
1            11            15

df1 = df.filter(like='_').groupby(df.columns.str.split('_').str[0], axis=1).sum()
print (df1)
   ColName1Orig  ColName2Orig
0             3             7
1            11            15

df1 = df.filter(like='_').groupby(df.columns.str[:12], axis=1).sum()
print (df1)
   ColName1Orig  ColName2Orig
0             3             7
1            11            15