Python新手。简单的问题让我头晕目眩。
假设我有一个大熊猫系列如下:
my_series = pd.Series([(1,2), (2,3), (1,3)])
我还有一个“查找”列表列表,如下所示:
my_lookup = [([0,1], 0), ([1,1], 1), ([1,2], 2), ([2,2], 3), ([0,3], 4), ([1,3], 5), ([2,3], 6)]
1)我想知道如何用my_lookup中相应的值替换my_series中的每一对。在这种情况下,my_series应该成为pd.Series([2,6,5])。
2)我想知道如何创建一个具有相应值的新系列,而不是像上一个问题那样替换。
3)如果不是每个“密钥”都在my_lookup中,答案是否会改变?例如,如果my_lookup改为:
my_lookup = [([0,1], 0), ([1,1], 1), ([2,2], 3), ([0,3], 4), ([1,3], 5), ([2,3], 6)]
编辑:我想使用字典和地图功能如下:
df["Gender"] = df["Sex"].map({"female":0, "male":1}).astype(int)
..但我的密钥是列表,Python似乎不喜欢这样,所以我正在尝试不同的路径。
答案 0 :(得分:2)
使用字典肯定是在正确的轨道上。
你的'钥匙'可能会改变吗?从您系列的初始声明开始,看起来他们不会,但您确实将它们作为my_lookup
中的列表。
如果它们的键不会改变,您可以将它们转换为元组并将它们用作字典中的键。例如(在普通的python中,因为我没有在这台计算机上安装pandas进行测试):
d = {tuple(k): v for k,v in my_lookup}
然后,要替换系列中的每个键,您可以执行以下操作:
fReplace = lambda k: d[k]
new_series = map(fReplace, my_series) # or my_series.map if you're in pandas
# alternatively (and there's probably a nicer way, I don't have pandas to play with)
new_series = pd.Series(map(fReplace, my_series))
如果不是每个键都在查找中,则需要确定是否存在合理的默认值。如果有,您可以在字典上使用.get
:
fReplace = lambda k: d.get(k, sensible_default_value)
如果没有,您可以使用None
作为默认值,然后过滤到结果系列以删除None
的值。