【问题标题】:How can I convert a dataframe into a nested dictionary?如何将数据框转换为嵌套字典?
【发布时间】:2019-09-06 21:00:10
【问题描述】:

我有一个如下所示的数据框:

    ORG                 SURVEY_DATE     NOS
Asset Management    2018-04-23          1.0
Asset Management    2018-05-08          1.0
Asset Management    2018-10-29          1.0
CIO                 2018-11-08          1.0
CIO                 2018-11-13          2.0

我想把它转换成这样的字典。

{
  "Asset Management": {
    "2019-03-30": 50,
    "2019-03-31": 40,
    "2019-04-01": 20,
    "2019-04-02": 30
  },
  "CIO": {
    "2019-03-30": 10,
    "2019-03-31": 20,
  }
}

【问题讨论】:

  • 嗨,检查我的新答案。现在这正是您想要的。
  • @PaulCaballero,我也更新了我的答案。
  • 嗨@lmiuelvargasf,也感谢您的帮助!非常感谢!
  • @PaulCaballero,不客气!

标签: python pandas dataframe dictionary


【解决方案1】:

好的,我更新了我的答案。哇!现在可以了。

In [9]: df
Out[9]:
                ORG SURVEY_DATE  NOS
0  Asset Management  2018-04-23  1.0
1  Asset Management  2018-05-08  1.0
2  Asset Management  2018-10-29  1.0
3               CIO  2018-11-08  1.0
4               CIO  2018-11-13  2.0

In [10]: df.groupby('ORG').apply(lambda x: dict(zip(x['SURVEY_DATE'],x['NOS']))).to_dict()
Out[10]:
{'Asset Management': {'2018-04-23': '1.0',
  '2018-05-08': '1.0',
  '2018-10-29': '1.0'},
 'CIO': {'2018-11-08': '1.0', '2018-11-13': '2.0'}}

说明:如果您有 2 个或更多迭代,您可以使用 zip 同时循环它们:

x = [1,2,3]
y = [4,5,6]
for i,j in zip(x, y):
    print(i, j) # (1,4), (2,5), (3,6)

我是creating a dictionary from a tuple。此外,lambda 只是任何一个线性函数定义的简写:

foo = lambda x: x+1
# equivalent
def foo(x):
  return x+1

【讨论】:

  • 您好 knh190,实际上我几乎尝试过您提供的那种代码。
  • 嗨@knh190,它成功了!我只是想了解你的代码,这里的 zip 是做什么的?对不起,我不太熟悉使用 lambda 的新手问题。再次感谢您,非常感谢您的帮助!
  • @PaulCaballero 我更新了一个简短的解释。当然,你也可以找到官方文档。
【解决方案2】:

假设您的数据框位于名为 df 的变量中:

>>> df.groupby('ORG').apply(lambda f: {key: value for key, value in zip(f.SURVEY_DATE, f.NOS)} ).to_dict()
{'Asset Management': {'2018-04-23': 1.0, '2018-05-08': 1.0, '2018-10-29': 1.0},
 'CIO': {'2018-11-08': 1.0, '2018-11-13': 2.0}}

【讨论】:

  • 但不完全是预期的输出?
  • 不,我想成为“ORG”列作为我的索引。请检查我想要的输出。
  • @PaulCaballero,很抱歉造成混乱。我更新了我的答案,但我不确定您是如何获得其中键是调查数据元素的值。
猜你喜欢
  • 2021-08-30
  • 2017-09-04
  • 2014-05-10
  • 1970-01-01
  • 2021-11-28
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多