-1

我有一个类似的字典:

dict = {'color':['red', 'blue', 'green'], 'fruits':['apple', 'banana', 'grape'], 'animal':['cat', 'dog']}

和 df 有两列;具有多个字符串的文本列:

index   |   text
-------------------------------
a       | house, chair, green
-------------------------------
b       | yellow, banana, wall
--------------------------------
c       | dog, brown, grass
--------------------------------

如果文本列中的任何字符串与 dict.values 匹配,我想使用 dict 中的密钥对向 df 添加额外的列,因此对于 a - color / b - fruits / c - animal。

我正在尝试使用isin列表,但认为使用 dict 可能会更有效。?任何帮助表示赞赏

4

1 回答 1

1

最简单的方法是使用apply().

def get_type(input_strs):
    for key, val in type_dict:
        for input_str in input_strs:
            if input_str in val:
                return key

df["str_type"] = df["text"].apply(get_type)

但是,请记住,apply()优化很差 - 它大致相当于使用 for 循环来应用函数。

如果性能是一个问题,您可能会考虑反转您的字典{"red":"color", "blue":"color" ...}并编写一个更简单的函数来应用

def get_type(input_strs):
    for input_str in input_strs:
        if input_str in type_dict:
            return type_dict[input_str]

您还可以考虑在 pandas 中为一系列 strs 使用优化函数之一,例如extract()假设这df["text"]是一系列 strs,而不是 strs 列表。对于一系列列表没有优化的 pandas 函数,如果性能是优先考虑的,将列表保留在 DataFrames 中通常是个坏主意。

于 2021-04-19T19:36:59.520 回答