是否有内置函数使用字典作为数据帧中的映射器和索引级别来创建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
有什么建议吗?
答案 0 :(得分:2)
将此用于您需要的新列:
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'))]
答案 1 :(得分:0)
上述@WebDev答案的超级非Python效率低的方式
docker-compose exec -T MYSQL_CONTAINERNAME mysql databasename < data.sql