Python 标识dataframe列与字符串匹配的位置

Python 标识dataframe列与字符串匹配的位置,python,pandas,Python,Pandas,我有一个熊猫数据框,如下所示。我想识别df中与给定字符串匹配的列的索引值(更具体地说,是与'sim-'或'act-'后面的列名匹配的字符串) 现在,我想循环查看prods,确定出现prod1和prod2的列,然后使用这些列创建新的数据帧。我该怎么做?在R中,我可以使用哪个函数轻松地完成此操作。下面是我想要获得的数据帧示例 df_prod1 sim_prod1 act_prod1 0 1.0 1.1 1 1.4 1.0 df_prod2

我有一个熊猫数据框,如下所示。我想识别
df
中与给定字符串匹配的列的索引值(更具体地说,是与'sim-'或'act-'后面的列名匹配的字符串)

现在,我想循环查看
prods
,确定出现
prod1
prod2
的列,然后使用这些列创建新的数据帧。我该怎么做?在R中,我可以使用
哪个
函数轻松地完成此操作。下面是我想要获得的数据帧示例

df_prod1
    sim_prod1   act_prod1
0   1.0         1.1
1   1.4         1.0

df_prod2
    sim_prod2   act_prod2
0   2.0         2.5
1   2.1         2.0

使用轴=1尝试groupby:

for prod, d in df.groupby(df.columns.str[-4:], axis=1):
    print(f'this is {prod}')
    print(d)
    print('='*20)
输出:

this is rod1
   sim-prod1  act-prod1
0        1.0        1.1
1        1.4        1.0
====================
this is rod2
   sim-prod2  act-prod2
0        2.0        2.5
1        2.1        2.0
====================
   sim-prod1  act-prod1
0        1.0        1.1
1        1.4        1.0


   sim-prod2  act-prod2
0        2.0        2.5
1        2.1        2.0
现在,将它们作为变量:

dfs = {prod:d for prod, d in df.groupby(df.columns.str[-4:], axis=1)}

使用轴=1尝试groupby:

for prod, d in df.groupby(df.columns.str[-4:], axis=1):
    print(f'this is {prod}')
    print(d)
    print('='*20)
输出:

this is rod1
   sim-prod1  act-prod1
0        1.0        1.1
1        1.4        1.0
====================
this is rod2
   sim-prod2  act-prod2
0        2.0        2.5
1        2.1        2.0
====================
   sim-prod1  act-prod1
0        1.0        1.1
1        1.4        1.0


   sim-prod2  act-prod2
0        2.0        2.5
1        2.1        2.0
现在,将它们作为变量:

dfs = {prod:d for prod, d in df.groupby(df.columns.str[-4:], axis=1)}

尝试此操作,将数据帧的各个部分存储为字典:

df_dict = dict(tuple(df.groupby(df.columns.str[4:], axis=1)))

print(df_dict['prod1'])
print('\n')
print(df_dict['prod2'])
输出:

this is rod1
   sim-prod1  act-prod1
0        1.0        1.1
1        1.4        1.0
====================
this is rod2
   sim-prod2  act-prod2
0        2.0        2.5
1        2.1        2.0
====================
   sim-prod1  act-prod1
0        1.0        1.1
1        1.4        1.0


   sim-prod2  act-prod2
0        2.0        2.5
1        2.1        2.0

尝试此操作,将数据帧的各个部分存储为字典:

df_dict = dict(tuple(df.groupby(df.columns.str[4:], axis=1)))

print(df_dict['prod1'])
print('\n')
print(df_dict['prod2'])
输出:

this is rod1
   sim-prod1  act-prod1
0        1.0        1.1
1        1.4        1.0
====================
this is rod2
   sim-prod2  act-prod2
0        2.0        2.5
1        2.1        2.0
====================
   sim-prod1  act-prod1
0        1.0        1.1
1        1.4        1.0


   sim-prod2  act-prod2
0        2.0        2.5
1        2.1        2.0

您也可以不使用
groupby()
for loop来执行此操作,方法是:-

df_prod2=df[df.columns[df.columns.str.contains(prods[0])]]
df_prod1=df[df.columns[df.columns.str.contains(prods[1])]]

您也可以不使用
groupby()
for loop来执行此操作,方法是:-

df_prod2=df[df.columns[df.columns.str.contains(prods[0])]]
df_prod1=df[df.columns[df.columns.str.contains(prods[1])]]

这里唯一的问题是,在现实中我有很多提示,所以一个一个地写出来是行不通的。这里唯一的问题是,在现实中我有很多提示,所以一个一个地写出来是行不通的。