首页 > 解决方案 > 确定 pandas 数据框列与字符串匹配的位置

问题描述

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

# Sample df
import pandas as pd
df = pd.DataFrame({
    'sim-prod1': [1, 1.4],
    'sim-prod2': [2, 2.1],
    'act-prod1': [1.1, 1],
    'act-prod2': [2.5, 2]
})

# Get unique prod values from df.columns
prods = pd.Series(df.columns[1:]).str[4:].unique()
prods
  array(['prod2', 'prod1'], dtype=object)

我现在想遍历prods并识别出现的列,prod1然后prod2使用这些列创建新的数据框。我怎样才能做到这一点?在 RI 中可以使用该which功能轻松完成此操作。我想获得的示例数据框如下。

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

标签: pythonpandas

解决方案


尝试 groupby axis=1

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
====================

现在,将它们作为变量:

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

推荐阅读