【问题标题】:Pandas dataframe combine unique row valuesPandas 数据框结合了唯一的行值
【发布时间】:2020-09-03 04:24:13
【问题描述】:

我有一个如下所示的数据框,其中包含超过 90000 行。

origin      destination people
101011001   101011001   7378
101011001   101011002   120
101011001   101011002   8
101011001   101011002   285
101011001   101011003   7
101011001   101011004   0
101011001   101011004   1
101011001   101011004   2
101011001   101011004   9
101011002   101011001   5

如您所见,一些 origindestination 值重复,例如有多个行,其中 origin=101011001,destination=101011002。 我的目标是将重复的 origindestination 值和 sum people 列分组,因此数据框如下所示:

origin      destination people
101011001   101011001   7378
101011001   101011002   413
101011001   101011003   7
101011001   101011004   12
101011002   101011001   5

我已经尝试过jsondf.groupby(['origin', 'destination']).sum(),它为我提供了正确的总和和目标值,但这并不是我想要的,因为我希望原始值也显示在每个目标的行中。

注意我的最终目标是将此数据帧作为表放入 SQL 数据库中,并且使用上面的 .groupby() 代码,源值和目标值实际上被解释为 NULL 这不是我想要。

谢谢!

【问题讨论】:

    标签: python sql pandas dataframe pandas-groupby


    【解决方案1】:

    显示每个原始值的快速简便的方法是在使用 groupby 后简单地重置索引。下面是一个例子,展示了重置索引前后数据库的样子:

    df.groupby(['origin', 'destination']).sum()
    
    origin      destination  people
    101011001   101011001    7378
                101011002    413
                101011003    7
                101011004    12
    101011002   101011001    5
    

    添加 reset_index() 后,数据框的每一行都会显示每个原点值。

        df.groupby(['origin', 'destination']).sum().reset_index()
    
        origin      destination people
    0   101011001   101011001   7378
    1   101011001   101011002   413
    2   101011001   101011003   7
    3   101011001   101011004   12
    4   101011002   101011001   5
    

    这应该允许您发送到 sql 数据库而不会将源解释为空值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2018-03-04
      • 2020-10-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      相关资源
      最近更新 更多