在Pandas数据框中将列表元素转换为广义字典元素

时间:2019-07-15 09:07:58

标签: python list dataframe

我有一个熊猫数据框,如下所示。有一列包含元素作为项目列表,每行中项目的数量不同。我想将列表元素转换为具有布尔值的字典元素,如输出所示。最快的方法是什么?

DataFrame:

Index  Value
0      [Cat,Dog,Rat]
1      [Cat,Dog,Horse]
2      [Cat,Dog,Horse,Rat]
3      [Cat,Horse,Rat]
4      [Dog,Horse,Rat]

预期输出:

Index  Value
0      {'Cat':'Yes','Dog':'Yes','Horse':'No','Rat':'Yes'}
1      {'Cat':'Yes','Dog':'Yes','Horse':'Yes','Rat':'No'}
2      {'Cat':'Yes','Dog':'No','Horse':'Yes','Rat':'Yes'}
4      {'Cat':'No','Dog':'Yes','Horse':'Yes','Rat':'Yes'}

2 个答案:

答案 0 :(得分:1)

首先,我创建一个变量,其中包含所有可能的键,称为keys。然后

df.Value.apply(lambda x: dict((key,"Yes") if key in x else (key,"No") for key in keys))

示例输出

>>> data = {'Value': [['Cat', 'Dog', 'Horse', 'Rat'], ['Dog', 'Horse', 'Rat']]} 
>>> keys
['Cat', 'Dog', 'Horse', 'Rat']
>>> data = {'Value': [['Cat', 'Dog', 'Horse', 'Rat'], ['Dog', 'Horse', 'Rat']]} 
>>> df = pd.DataFrame(data)
>>> df
                    Value
0  [Cat, Dog, Horse, Rat]
1       [Dog, Horse, Rat]
>>> df.Value.apply(lambda x: dict((key,"Yes") if key in x else (key,"No") for key in keys))
0    {'Rat': 'Yes', 'Cat': 'Yes', 'Dog': 'Yes', 'Ho...
1    {'Rat': 'Yes', 'Cat': 'No', 'Dog': 'Yes', 'Hor...
Name: Value, dtype: object

答案 1 :(得分:0)

具有set对象和简单条件:

In [386]: names = set(s for lst in df['Value'].values for s in lst)

In [387]: df['Value'] = df['Value'].apply(lambda row: {n: 'Yes' if n in row else 'No' for n in names})

In [388]: df
Out[388]: 
   Index                                              Value
0      0  {'Cat': 'Yes', 'Rat': 'Yes', 'Horse': 'No', 'D...
1      1  {'Cat': 'Yes', 'Rat': 'No', 'Horse': 'Yes', 'D...
2      2  {'Cat': 'Yes', 'Rat': 'Yes', 'Horse': 'Yes', '...
3      3  {'Cat': 'Yes', 'Rat': 'Yes', 'Horse': 'Yes', '...
4      4  {'Cat': 'No', 'Rat': 'Yes', 'Horse': 'Yes', 'D...