【问题标题】:Preserving duplicate index of a pandas df when converting to python dictionary转换为 python 字典时保留熊猫 df 的重复索引
【发布时间】:2021-06-25 13:30:51
【问题描述】:

我有一个 df,它在 '2020-10-25 02:00:00' 处有一个具有不同值的重复索引:

df
...                    5
2020-10-25 02:00:00    10
2020-10-25 02:00:00    7
...                    8

由于夏季/冬季时间的变化,我有这个重复的索引。直到我想通过df.to_dict() 将此 df 更改为字典之前都可以。当我将其更改为字典时,df['2020-10-25 02:00:00'] 的值之一被删除,因为字典不能有重复的键。

我正在寻找类似以下的东西,而不是硬编码,它可以在转换为字典时将这两个值存储为列表:

df.to_dict(preserve_duplicates=True)

总结:当df转换为python字典时,有没有办法保留df的重复索引?

【问题讨论】:

    标签: python pandas dictionary indexing duplicates


    【解决方案1】:

    您可以做的一件事是在将 df 转换为 dict 之前将这些值组合在一起(即到一个列表中):

                         value
    date
    2020-10-25 01:00:00      5
    2020-10-25 02:00:00     10
    2020-10-25 02:00:00      7
    
    
    df.groupby(df.index).agg(list).to_dict()
    > {'value': {'2020-10-25 01:00:00': [5], '2020-10-25 02:00:00': [10, 7]}}
    

    agg 函数可以根据您的需要灵活使用,您也可以进行求和或任何其他操作。

    【讨论】:

    • 是否也可以从这本词典创建 df ?并返回到您首先键入的同一个 df?
    • @oakca 是的,你可以简单地做pd.DataFrame(...).explode("value")
    【解决方案2】:

    应该避免 Pandas 数据框中的重复索引,但在 Python 字典中,它们是不可能的。

    恕我直言,最简单的方法就是在构建字典之前重置索引:

    df.reset_index().to_dict()
    

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 2021-03-01
      • 2020-12-01
      • 1970-01-01
      • 2019-02-03
      • 2020-12-01
      • 1970-01-01
      • 2020-09-08
      • 2017-11-22
      相关资源
      最近更新 更多