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])]]
这里唯一的问题是,在现实中我有很多提示,所以一个一个地写出来是行不通的。这里唯一的问题是,在现实中我有很多提示,所以一个一个地写出来是行不通的。