【问题标题】:Creating a dictionary in pandas by mapping column values to headers通过将列值映射到标题在 pandas 中创建字典
【发布时间】:2018-03-15 08:36:06
【问题描述】:

我有以下数据框:

F1:


head       drowsiness     sweat       
head_P     D_P            sw_f
head_S     D-H            sw_h
head_F     D_L            sw_l

我需要通过将列中的所有值映射到列的标题来创建一个字典,如下所示:

Dic = {head_p:head, head_S: head, head_F: head,  D_P: drowsiness, D-H:drowsiness ,  D_L: drowsiness,   sw_f: sweat,  sw_h: sweat , sw_l: sweat }

我创建了每列的列表并将其映射到标题,但我不知道如何创建这样的字典。谢谢!

【问题讨论】:

  • 你应该明白字典不能包含重复的键,所以这是不可能的。你还有什么想法?
  • @COLDSPEED,对不起,我编辑了。

标签: python pandas dictionary


【解决方案1】:

melt + set_index + to_dict:

df

     head drowsiness sweat
0  head_P        D_P  sw_f
1  head_S        D-H  sw_h
2  head_F        D_L  sw_l

df.melt().set_index('value').to_dict()['variable']

{'D-H': 'drowsiness',
 'D_L': 'drowsiness',
 'D_P': 'drowsiness',
 'head_F': 'head',
 'head_P': 'head',
 'head_S': 'head',
 'sw_f': 'sweat',
 'sw_h': 'sweat',
 'sw_l': 'sweat'}

如果您收到此错误:

AttributeError: 'DataFrame' object has no attribute 'melt

这意味着您使用的是旧版本的 pandas (pd.melt:

pd.melt(df).set_index('value').to_dict()['variable']

【讨论】:

  • 它返回以下错误:AttributeError: 'DataFrame' object has no attribute 'melt'
  • @Mary 您必须使用旧版本的熊猫。改为pd.melt(df).set_index('value').to_dict()['variable']
【解决方案2】:

添加T

df.melt().set_index('value').T.to_dict('records')
Out[277]: 
[{'D-H': 'drowsiness',
  'D_L': 'drowsiness',
  'D_P': 'drowsiness',
  'head_F': 'head',
  'head_P': 'head',
  'head_S': 'head',
  'sw_f': 'sweat',
  'sw_h': 'sweat',
  'sw_l': 'sweat'}]

【讨论】:

    【解决方案3】:

    选项 1

    dict(zip(df.values.ravel(), df.columns.repeat(len(df))))
    
    {'D-H': 'drowsiness',
     'D_L': 'sweat',
     'D_P': 'head',
     'head_F': 'sweat',
     'head_P': 'head',
     'head_S': 'drowsiness',
     'sw_f': 'head',
     'sw_h': 'drowsiness',
     'sw_l': 'sweat'}
    

    选项 2

    dict((v, h) for r, h in zip(df.values, df.columns) for v in r)
    
    {'D-H': 'drowsiness',
     'D_L': 'sweat',
     'D_P': 'head',
     'head_F': 'sweat',
     'head_P': 'head',
     'head_S': 'drowsiness',
     'sw_f': 'head',
     'sw_h': 'drowsiness',
     'sw_l': 'sweat'}
    

    【讨论】:

    • 帅哥一个:)
    猜你喜欢
    • 2021-01-26
    • 2016-09-02
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2013-01-08
    • 2017-09-29
    相关资源
    最近更新 更多