【问题标题】:Pandas set_index interaction with to_dict and combining columns to show as a list of valuesPandas set_index 与 to_dict 交互并组合列以显示为值列表
【发布时间】:2021-08-02 19:01:04
【问题描述】:

我做了 df.set_index 并列出了当我转换成字典时我想要作为键的所有列的名称。

dict = df.set_index(['num1','num2','num3']).to_dict()

它输出带有我想要的确切键的字典。但是,我希望未命名的列是一个值列表,但它只显示一个列值。

{('one','two','three') : 8, ('four','seven','three') : 10 ... } 是输出,但我希望它看起来像这样:

{('one','two','three') : [8,6,10], ('four','seven','three'): [10,2,4] 

如何让 to_dict 将所有列输出为每个键的值列表?

【问题讨论】:

  • 认为我明白你在问什么,但不清楚(至少对我来说)为什么你想这样做。也许如果您解释了您要对问题的最终结果做什么,那么解决方案可能会更明显。
  • 我有一张 Excel 表格。前 10 列的各种组合将等于后 3 列中的三个值之一。我将excel表翻译成字典。但我只能将其中一个值与键相关联,并希望将所有 3 个值作为一个列表。我想要这样做的原因不是一百万个 if/else 语句,我可以使用组合作为键来搜索字典。其他代码决定选择哪 3 个值。
  • 我认为,样本数据和预期输出将大大有助于得到答案。

标签: python pandas dataframe dictionary


【解决方案1】:

首先,获取样本数据(您的问题中df 的内容)会非常有帮助。如果您坚持使用to_dict 方法,我建议您使用以下方法。

  1. 最好经常检查这些方法的文档。如果您查看to_dict 方法文档,您会发现orient 参数默认设置为“dict”,但还有其他选项可以使用。

  2. 在您的情况下,最合适的解决方案是使用 "split" 类型,该类型将返回三个键的字典:index(索引列表)、columns(列表列),数据(数据列表)。

  3. 那么你可以:

  • 要么使用这种字典
df_dict = df.set_index(['num1','num2','num3']).to_dict(orient='split')

idx = df_dict['index'].index(('one','two','three'))
val = df_dict['data'][idx]
# val = [8, 6, 10]
  • 或者您可以将其合并到新字典中
df_dict = df.set_index(['num1','num2','num3']).to_dict(orient='split')
df_dict = dict(zip(a["index"], a["data"]))  # note that I'm renamed your variable to 'df_dict', because 'dict' is builtin method for creation dictionaries
val = df_dict[('one','two','three')]
# val = [8, 6, 10]

注意: 当然还有另一种方法可以做到这一点,但是由于您没有提供任何数据,因此尚不完全清楚这是否是您想要的。更新您的问题或评论此答案以使其更好。

【讨论】:

  • 谢谢,这很有帮助,但我最终能够想出这个具有所需输出的函数。我没有使用“拆分”,但我现在看到了它的好用处。
  • {key: [value] + [dict2[key]] for key, value in dict1.items()} 是将数据拆分为单独的字典后的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 2011-09-04
  • 1970-01-01
  • 2019-03-25
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多