使用字典作为映射器创建熊猫系列

时间:2019-05-18 16:52:58

标签: python pandas dictionary

是否有内置函数使用字典作为数据帧中的映射器和索引级别来创建pandas.Series列?

这个想法是根据索引级别和字典中的值创建一个新列。例如:

让我们假设以下数据帧,其中idnamecode以及索引中的不同级别

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

有什么建议吗?

2 个答案:

答案 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