为了账号安全,请及时绑定邮箱和手机立即绑定

pandas 使用多索引合并数据帧

pandas 使用多索引合并数据帧

Qyouu 2023-09-05 15:39:47
我有一堆多索引,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   sdstation month day           A       1     2      55  1.0B       1     2      40  2.0C       1     2      84  1.2D       1     2      31  3.0E       1     2      44  4.0F       1     2      12  0.7df2存储一个月中某天1(例如 1 月 2 日)的所有观察结果。每个数据帧的站索引都是唯一的(没有两个站 ID 是相同的)。然而,各个数据帧之间的站集可能会有所不同,具体取决于月份和/或日期。问题:如何将这些数据帧组合成具有以下结构的单个数据帧(忽略精确值mean和sd值,我已经编好了它们):>>> df                   mean   sdstation 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(...)
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

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


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信