在Python中循环遍历字符串列表

时间:2019-06-24 12:38:36

标签: python list loops

我有一个包含不同颜色的列表,所有颜色都存储为字符串变量。

Preferredcolours = ['red','yellow','green', 'blue']

我有一个熊猫数组,其中包含有关汽车的信息。 DfCar ['colour']列之一是这些汽车的颜色。我想在数据框中创建一个名为PreferredMathcing的新变量,如果DataFrame颜色列与列表颜色之一匹配,则该列为= 1。如何使用for循环解决此问题?

理想情况下,我想要这种解决方案:

+=================+============================+
| DfCar['colour'] | DfCar['PreferredMathcing'] |
+=================+============================+
| white           |                          0 |
+-----------------+----------------------------+
| yellow          |                          1 |
+-----------------+----------------------------+
| black           |                          0 |
+-----------------+----------------------------+
| purple          |                          0 |
+-----------------+----------------------------+
| green           |                          1 |
+-----------------+----------------------------+

4 个答案:

答案 0 :(得分:1)

您可以使用.isin(),这会根据行是否在值列表中而返回每行True / False的序列。然后使用.astype(int)来获取您的1 / 0

尝试一下:

import pandas as pd
import numpy as np

df = pd.DataFrame.from_dict({'colour': ['white', 'yellow', 'black', 'purple', 'green']})
Preferredcolours = ['red','yellow','green', 'blue']

df["PreferredMathcing"] = df['colour'].isin(Preferredcolours).astype(int)

print(df)

输出:

   colour  PreferredMathcing
0   white                  0
1  yellow                  1
2   black                  0
3  purple                  0
4   green                  1

注意:

选择具有纯库函数的解决方案可能会胜过使用apply和自定义python逻辑的解决方案。

在我的计算机上对彼此进行基准测试表明.isin()快了将近x8:

with '.isin()': 1.0591506958007812
with '.apply()': 8.234664678573608
ratio: 7.774780974248154

答案 1 :(得分:1)

以下将为您提供输出

def check_colour(x, Preferredcolours) :
    return 1 if x['colour'] in Preferredcolours else 0

dfCar['PreferredMathcing'] = df.apply(check_colour,args=(Preferredcolours,), axis=1)

答案 2 :(得分:0)

您可以使用np.where,如下所示:

import pandas as pd
import numpy as np

DfCar = pd.DataFrame.from_dict({'colour': ['white', 'yellow', 'black', 'purple', 'green']})
Preferredcolours = ['red','yellow','green', 'blue']

DfCar['PreferredMathcing'] = np.where(DfCar['colour'].isin(Preferredcolours), 1, 0)

答案 3 :(得分:0)

假设DfCar是您的数据框。

Preferredcolours = ['red','yellow','green', 'blue']    
DfCar['PreferredMatching'] = DfCar['colour'].apply(lambda x: x in Preferredcolours)

这会将lambda函数应用于“颜色”列中的每个元素。只需检查它是否为“ preferredcolours”,然后返回True或False。