首页 > 解决方案 > 检索位于任何行或列的数据框中的某个值,并将其保存在单独的列中,无需 forloop

问题描述

我有一个如下所示的数据框

df              
    A           B            C  
    0           1            TRANSIT_1  
    TRANSIT_3           
    0           TRANSIT_5    

我想将其更改为以下内容:
Resulting DF

A   B   C   D
0   1       TRANSIT_1
            TRANSIT_3
0           TRANSIT_5

图像

所以我尝试使用 str.contains ,一旦我收到带有 True 或 False 的系列,我把它放在 eval 函数中,以某种方式让我得到我想要的表。

我试过的代码:

series_index = pd.DataFrame()
series_index = df.columns.str.contains("^TRANSIT_", case=True, regex=True)
print(type(series_index))
series_index.index[series_index].tolist()

我想用 eval 函数把它写成单独的列,比如

df = eval(df[result]=the index) # I dont know, But eval function does evaluation and puts it in a separate column

标签: pythonpandas

解决方案


我找不到一个简单的单线,但这有效:

idx = list(df1[df1.where(df1.applymap(lambda x: 'TRA' in x if isinstance(x, str) else False)).notnull()].stack().index)
a, b = [], []
for sublist in idx:
    a.append(sublist[0])
    b.append(sublist[1])
df1['ans'] = df1.lookup(a,b)

输出

           A          B          C        ans
0          0          1  TRANSIT_1  TRANSIT_1
1  TRANSIT_3       None       None  TRANSIT_3
2          0  TRANSIT_5       None  TRANSIT_5

推荐阅读