如何根据所述DataFrame中的另一个系列将布尔系列添加到python DataFrame中?

时间:2018-08-13 12:15:50

标签: python python-3.x pandas dataframe

SO。好久不见

我不确定我的数据集是否专有,但我可以简化。我正在处理一个涉及状态的DataFrame,并给了我一些包含有关这些状态信息的列表。

         Name   Value1    Value2
0     Alabama      7.4       4.4
1    Delaware      6.4       4.4
2        Ohio      2.4       2.0
3    Virginia      1.4       1.2

但是,然后给了我一些清单。可以说,它们是曾经有过马市长的州名单。

horse_mayor_yes = ['Alabama', 'Delaware']
horse_mayor_no  = ['Ohio', 'Virginia']

我想要的输出:

         Name   Value1    Value2    Horse    Horseless
0     Alabama      7.4       4.4        1            0
1    Delaware      6.4       4.4        1            0
2        Ohio      2.4       2.0        0            1
3    Virginia      1.4       1.2        0            1

我知道我可以创建1和0的列表,但是如果我得到了新的无序列表(假设唯一的名称),我希望可以在具有数百个命名项的情况下进行扩展。

谢谢!

e1:用户,谢谢您纠正我的错别字。 e2:列表不必相互排斥。

2 个答案:

答案 0 :(得分:2)

您可以只使用isin()

df["Horse"] = df.Name.isin(horse_mayor_yes)
df["Horseless"] = ~df.Horse

df
       Name  Value1  Value2  Horse Horseless
0   Alabama     7.4     4.4   True     False
1  Delaware     6.4     4.4   True     False
2      Ohio     2.4     2.0  False      True
3  Virginia     1.4     1.2  False      True

如果您需要将bool转换为int,请使用:

df[["Horse", "Horseless"]] = df[["Horse", "Horseless"]].astype(int)

答案 1 :(得分:0)

您需要: 从这个问题尚不清楚horsehorseless是否可以同时为True。

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'Name':['Alabama','Deleware','Ohio','Virginia'],
                    'value1':[1,2,3,4], 'value2':[5,6,7,8]})


horse_mayor_yes = ['Alabama', 'Deleware']
horse_mayor_no  = ['Ohio', 'Virginia']

df['Horse'] = np.where(df['Name'].isin(horse_mayor_yes), 1, 0)
df['Horseless'] = np.where(df['Name'].isin(horse_mayor_no), 1, 0)

print(df)

输出:

       Name  value1  value2  Horse  Horseless
0   Alabama       1       5      1          0
1  Deleware       2       6      1          0
2      Ohio       3       7      0          1
3  Virginia       4       8      0          1