Python 使用字典作为映射器创建熊猫系列
是否有内置函数使用字典作为映射器和数据框中的索引级别创建Python 使用字典作为映射器创建熊猫系列,python,pandas,dictionary,Python,Pandas,Dictionary,是否有内置函数使用字典作为映射器和数据框中的索引级别创建pandas.Series列 其想法是基于索引级别中的值和字典创建一个新列。例如: 让我们假设以下数据帧,其中id、name和code以及索引中的不同级别 df col1 col2 id name code 0 a x 7 10 y 8 11 z 9 12
pandas.Series
列
其想法是基于索引级别中的值和字典创建一个新列。例如:
让我们假设以下数据帧,其中id
、name
和code
以及索引中的不同级别
df
col1 col2
id name code
0 a x 7 10
y 8 11
z 9 12
1 b x 13 16
y 14 17
z 15 18
下面的字典d={'a':{'y','z'},'b':{'x'}
新列的输出应如下所示:
col1 col2 new
id name code
0 a x 7 10 0
y 8 11 1
z 9 12 1
1 b x 13 16 1
y 14 17 0
z 15 18 0
作为映射的结果,new
=1
如果code
索引值在具有键name
的值的字典列表中,则为0
我试图手动创建此映射,但我不确定如何在索引级别上迭代
这是我迄今为止的尝试:
df['y'] = [1 if i in d[k] else 0 for k, v in d.items() for i
in df.index.get_level_values('code')]
但是我得到了下面的错误,这让我觉得我没有正确地迭代索引级别,或者没有按照预期与字典一起迭代
ValueError: Length of values does not match length of index
有什么建议吗?将此选项用于您需要的新专栏:
df['new'] = [1 if j in d[i] else 0 for (i, j) in zip(df.index.get_level_values('name'), df.index.get_level_values('code'))]
以上@WebDev答案的超级非pythonic且低效的方法
k = list(zip(df.index.get_level_values('Brand'),
df.index.get_level_values('Metric')))
tmp_list = [0]*df.shape[0]
for keys in d:
for vals in d[keys]:
for i,pairs in enumerate(k):
if pairs[0] == keys and pairs[1] == vals:
tmp_list[i] = 1
df['new'] = tmp_list