Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫用多索引合并数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫用多索引合并数据帧

Python 熊猫用多索引合并数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一堆多索引的数据框,其中包含在特定日期在一组地面站进行的天气观测的统计数据。下面是这样一个数据帧的结构: >>> df = pd.DataFrame({'month': [1, 1, 1, 1, 1, 1], 'day': [2]*6, 'station': ['A', 'B', 'C', 'D', 'E', 'F'], 'mean': [55, 40, 84,

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

>>> 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
存储月份
1
(比如1月2日)第
2天的所有观测值。每个数据帧的站点索引都是唯一的(没有两个站点ID是相同的)。然而,根据月份和/或日期,站集可能在各个数据帧之间变化

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

您可以使用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
您可以使用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