pandas 通过与其他df列进行比较,从一个df列的值列表中提取值

tvz2xvvm  于 2023-01-24  发布在  其他
关注(0)|答案(1)|浏览(179)

数据框包含两列。

| Extraction                       | Actual    |
| -------------------------------- | --------- |
| [1_CHECK_90,2_SAVE_43,3_GO_56]   | 2_SAVE    |
| [1_FIN_54,2_CHECK_22]            | 1_FIN_54  |
| [1_L_32,2_Y_79,4_X_66]           | 2_Y_79    |
| [5_T_88]                         | NA        |

通过与“提取”列左侧的数字进行比较,将提取转换为实际值。

def extract_actual(row):
    try:
        a =[]
        for i in row['Extraction']:
            for j in i:
                for k in j.split("_"): 
                    # print(k)
                    for l in row['Actual']:
                        if k == l:
                            a.append(j)
        return a
    except: 
        a =[]
        return a

我尝试使用上述函数。它的工作很好,但为实际='NA'这是不返回无。

gopyfrb3

gopyfrb31#

你能试试这个吗,

import pandas as pd

df = pd.DataFrame({'Extraction': [['1_CHECK', '2_SAVE', '3_GO'],                     
['1_FIN', '2_CHECK'], ['1_L', '2_Y', '4_X'], ['5_T']], 
'Actual': ['2_SAVE', '1_FIN', '2_Y', None]})

# get equal values index true false values
tFdf = df[df.columns.difference(["Expected"])].eq(df["Actual"], axis=0) 

# Assign matched values  
df["Extraction"].loc[tFdf["Actual"]] = df["Actual"][tFdf["Actual"]]

相关问题