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