首页 > 解决方案 > 有没有过滤到数据框的方法?

问题描述

我有一个像这样的数据框:

id      ;   dic
AZE21   ; {"Sport20" : 3 , "Football12":5, "Handball43":19,"Tennis98":32}
BA433   ; {"voiture23": 5 , "BMW32" : 19 , "Vélo81":10}
PA234   ; {"TV98": 12 , "Ordinateur83": 19 } 

我有一个类似 ["Sport","TV","Tennis"] 的列表。所以我想从“dic”的每一行中删除这个列表中的术语。例如对于这一行:

AZE21   ; {"Sport20" : 3 , "Football12":5, "Handball43":19,"Tennis98":32}

我们要删除 "Sport20" , "Tennis98" 因为列表中的 "Sport" 和 "Tennis" ....

我想要一个像这样的输出:

id      ;   dic
AZE21   ; { "Football12":5, "Handball43":19}
BA433   ; {"voiture23": 5 , "BMW32" : 19 , "Vélo81":10}
PA234   ; { "Ordinateur83": 19 } 

代码位:

import pandas as pd
import numpy as np

lst1 = ["AZE21","BA433","PA234"]
lst2 = [{"Sport20" : 3 , "Football12":5, "Handball43":19,"Tennis98":32},{"voiture23": 5 , "BMW32" : 19 , "Vélo81":10},{"TV98": 12 , "Ordinateur83": 19 } ]
df = pd.DataFrame(list(zip(lst1,lst2)), columns = ['id','dic'])

标签: pythonpython-3.xpandasdataframepandas-groupby

解决方案


与自定义函数一起使用Series.map(),如下所示:

lst_target = ["Sport","TV","Tennis"]    

def match_partial_key(dic):
    dic_keys = list(dic.keys())
    for key in dic_keys:
        for l in lst_target:
            if key.startswith(l):
                dic.pop(key)
    return dic

df['dic'] = df['dic'].map(match_partial_key)





print(df)

      id                                          dic
0  AZE21          {'Football12': 5, 'Handball43': 19}
1  BA433  {'voiture23': 5, 'BMW32': 19, 'Vélo81': 10}
2  PA234                         {'Ordinateur83': 19}

推荐阅读