代码之家  ›  专栏  ›  技术社区  ›  David Waterworth

如何防止熊猫重采样对id列进行重采样

  •  1
  • David Waterworth  · 技术社区  · 7 年前

    我有一个带有id列(站点id、类型id、设备id)的数据框,时间戳和值如下。

    >>>print(df.head())
    site_id type_id equipment_id    timestamp                           value 
    47      9       332859965468    2018-07-04  10:30:04.052000+10:00   23.000000
    47      9       332859965468    2018-07-04  10:30:04.064000+10:00   22.050505
    47      9       332859965468    2018-07-04  10:30:04.090000+10:00   26.046154
    47      9       332859965468    2018-07-04  10:30:04.101000+10:00   22.000000
    47      9       332859965468    2018-07-04  10:30:04.113000+10:00   191.989868
    

    >>> df = df \
    ...     .set_index(['timestamp']) \
    ...     .sort_values(['site_id','type_id','equipment_id','timestamp']) \
    ...     .groupby(['site_id','type_id','equipment_id']) \
    ...     .resample('15T') \
    ...     .mean()
    

    我得到了意想不到的结果,索引中的所有id值都被复制了。似乎是使用数据类型而不是列是否在索引中来执行聚合?我做错什么了吗?

                                                                site_id type_id equipment_id    value
    site_id type_id equipment_id    timestamp
    47      9       332859965468    2018-07-04 10:30:00+10:00   47.0    9.0     3.328600e+11    58.718625
                                    2018-07-04 10:45:00+10:00   47.0    9.0     3.328600e+11    59.175833
                                    2018-07-04 11:00:00+10:00   47.0    9.0     3.328600e+11    59.238318
                                    2018-07-04 11:15:00+10:00   47.0    9.0     3.328600e+11    58.982763
    

    1 回复  |  直到 7 年前
        1
  •  0
  •   Kris    7 年前

    这种情况发生在一个 MultiIndex 如果索引没有排序。如果希望使索引再次看起来“干净”,可以执行以下操作:

    df.sort_index(inplace=True)
    

    df = pd.DataFrame(
        data=np.random.rand(5, 4),
        index=pd.MultiIndex.from_tuples([(i, j) for i, j in zip(np.random.choice(['a', 'b'], 5), np.random.choice(['x', 'y'], 5))])
    )
    print(df)
    print(df.sort_index())
    

                0         1         2         3
    a x  0.198659  0.616800  0.438903  0.830216
      y  0.649111  0.860940  0.440068  0.044067
    b x  0.178537  0.601514  0.898179  0.140358
      y  0.444738  0.393664  0.877928  0.913228
    a x  0.369067  0.944636  0.740877  0.751681
                0         1         2         3
    a x  0.198659  0.616800  0.438903  0.830216
      x  0.369067  0.944636  0.740877  0.751681
      y  0.649111  0.860940  0.440068  0.044067
    b x  0.178537  0.601514  0.898179  0.140358
      y  0.444738  0.393664  0.877928  0.913228