【问题标题】:Pandas row multi-index with multiple columns具有多列的 Pandas 行多索引
【发布时间】:2020-08-18 17:05:53
【问题描述】:

我有一个数据框,其中包含来自源 data 的一些记录数据:

   t  min  max ... some_value
 0.0  0.0  0.0 ...        0.0
 5.0  0.0  2.4 ...        1.9
10.0  0.0  6.7 ...        4.6
 ...  ...  ... ...        ...

我还有一个数据框,其中包含有关来源的信息,source

type location some_info
   A      loc      info

我现在想将source 添加到data 中,因为我有多个来源的数据以及访问与当前数据对应的来源的相关信息,因此我可以轻松地从所选来源获取所有数据. 我的想法是以我有类似的方式使用多索引来做到这一点

                           data
                              t  min  max ... some_value
source
  type location some_info
     A      loc      info   0.0  0.0  0.0 ...        0.0
                            5.0  0.0  2.4 ...        1.9
                           10.0  0.0  6.7 ...        4.6
   ...      ...       ...   ...  ...  ... ...        ...

这可以通过简单的串联来完成吗?感觉会比这更棘手。

如果可能,我希望能够遍历包含来自多个来源的数据的数据框中的来源,如下所示:

for source in full_frame.index:
    source_data = full_frame[source,:]
    do_something(source_data)

如果这种方法看起来过于复杂,请告诉我。

编辑:更新了想要的结果的外观

【问题讨论】:

  • 在不了解do_something(source_data) 的情况下,假设您有很多位置,每个位置都有一个data 框架,那么最简单的方法就是向source 数据框添加一个引用[名称的]对应的data帧,分两步获取数据。我认为在这种情况下,单独管理数据的便利性超过了制作单个“宽”数据框的任何好处。
  • 所以您的意思是在source 中添加一列,例如source['ref']=data
  • 不,引用data。可能是唯一标识每个 data 数据帧的字符串名称。正如我所说,我不知道您的用例,但替代方法是多值列 [每个单元格中的列表] 用于 data 列,这可能更容易管理,也可能不容易管理。
  • 我主要是想分析不同来源的数据,并绘制数据。我可以只使用多个数据框并始终将标签名称传递给我的do_something(),它会绘制数据。
  • 这听起来最简单:)

标签: python python-3.x pandas multi-index


【解决方案1】:

用途:

result = pd.concat([source, data], axis=1, join='outer', keys=['source', 'data'])

连接发生在两个 DataFrame 中“按索引”。

如果一个 DataFrame 有一行,我添加了 join='outer' 以获得正确的行为 对于某些索引值,但第二个 DataFrame 没有。

【讨论】:

  • 我看不出拥有join='outer' 和不拥有它之间的区别。此外,这会导致result 帧在第一行中包含来自source 的数据,在接下来的行中包含来自NaN 的数据。这与result = pd.concat(dict(source=source, data=data), axis=1) 的结果相同
  • 其实是的。 join 的默认值只是 outer
猜你喜欢
  • 2021-07-13
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 2021-12-17
  • 2017-02-06
相关资源
最近更新 更多