我有一堆多索引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
存储2
月(例如1月2日)第1
天的所有观测值。站索引对于每个数据帧都是唯一的(没有两个站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
(...)
答案 0 :(得分:2)
您可以使用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