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:列表不必相互排斥。
答案 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)
您需要:
从这个问题尚不清楚horse
和horseless
是否可以同时为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