pandas 使用多索引合并数据帧

我有一堆多索引,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

df2存储一个月中某天1(例如 1 月 2 日)的所有观察结果。每个数据帧的站索引都是唯一的(没有两个站 ID 是相同的)。然而,各个数据帧之间的站集可能会有所不同,具体取决于月份和/或日期。


问题:如何将这些数据帧组合成具有以下结构的单个数据帧(忽略精确值mean和sd值,我已经编好了它们):


>>> 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

(...)


Qyouu
浏览 97回答 1
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   sdstation month dayA       1     2      55  1.0        2     2      55  1.0B       1     2      40  2.0        2     2      40  2.0C       1     2      84  1.2        2     2      84  1.2D       1     2      31  3.0        2     2      31  3.0E       1     2      44  4.0F       1     2      12  0.7        2     2      12  0.7G       2     2      15  1.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python