【问题标题】:pandas merge dataframes with multi-indexpandas 将数据帧与多索引合并
【发布时间】:2021-01-10 21:33:25
【问题描述】:

我有一堆多索引pd.DataFrames,其中包含特定日期在一组地面站进行的天气观测统计数据。这是一个这样的数据框的结构:

>>> df = pd.DataFrame({'month': [1, 1, 1, 1, 1, 1],
                   'day': [2]*6,
                   'station': ['A', 'B', 'C', 'D', 'E', 'F'],
                   'mean': [55, 40, 84, 31, 44, 12],
                   'sd': [1., 2., 1.2, 3., 4., 0.7]})
>>> df.set_index(['station', 'month', 'day'])
>>> df
>>> df = df.set_index(['station', 'month', 'day'])
>>> df
                   mean   sd
station month day           
A       1     2      55  1.0
B       1     2      40  2.0
C       1     2      84  1.2
D       1     2      31  3.0
E       1     2      44  4.0
F       1     2      12  0.7

df 存储 21 的所有观察值(例如,1 月 2 日)。每个数据帧的站索引都是唯一的(没有两个站 ID 相同)。但是,根据月份和/或日期,站集可能会因各个数据帧而异。

问题:如何将这些数据帧组合成一个具有以下结构的单个数据帧(忽略确切的meansd 值,我已经那些):

>>> df
                   mean   sd
station month day           
A       1     1      55  1.0
              2      44  5.0
              3      34  1.2
(...)
        2     1      55  1.0
              2      44  5.0
              3      34  1.2
(...)   
B       1     1      31  3.0
              2      44  5.0
              3      34  1.2
(...)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你可以使用 pd.concat:

    In [15]: df1 = pd.DataFrame({'month': [1, 1, 1, 1, 1, 1],
        ...:                    'day': [2]*6,
        ...:                    'station': ['A', 'B', 'C', 'D', 'E', 'F'],
        ...:                    'mean': [55, 40, 84, 31, 44, 12],
        ...:                    'sd': [1., 2., 1.2, 3., 4., 0.7]}).set_index(["station", "month", "day"])
    
    In [16]: df2 = pd.DataFrame({'month': [2, 2, 2, 2, 2, 2],
        ...:                    'day': [2]*6,
        ...:                    'station': ['A', 'B', 'C', 'D', 'G', 'F'],
        ...:                    'mean': [55, 40, 84, 31, 15, 12],
        ...:                    'sd': [1., 2., 1.2, 3.,1, 0.7]}).set_index(["station", "month", "day"])
    
    In [19]: pd.concat([df1,df2]).sort_index()
    Out[19]:
                       mean   sd
    station month day
    A       1     2      55  1.0
            2     2      55  1.0
    B       1     2      40  2.0
            2     2      40  2.0
    C       1     2      84  1.2
            2     2      84  1.2
    D       1     2      31  3.0
            2     2      31  3.0
    E       1     2      44  4.0
    F       1     2      12  0.7
            2     2      12  0.7
    G       2     2      15  1.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 2018-10-19
      • 2017-05-20
      相关资源
      最近更新 更多