【问题标题】:Add multiple columns at once to multiindex Pandas dataframe一次将多列添加到多索引 Pandas 数据框
【发布时间】:2020-12-13 11:50:24
【问题描述】:

我有一个数据框多索引熊猫数据框df

First    Foo     Bar
Second   Begin   Begin
1        5       1
2        4       4
3        6       6

我想添加两列同名

First    Foo             Bar
Second   Begin   End     Begin   End
1        5       1       1       2       
2        4       5       4       4       
3        6       7       6       7       

来自此来源 (new):

First    Foo    Bar
1        1      2
2        5      4
3        7      7

我尝试了df[:] = new[:] 之类的东西,但这只返回了 NaN

另一种方法是使用类似 for 循环的东西,但这不是 Pandas 的方法。在网上搜索并没有给我任何解决此问题的见解。

如何将具有相同名称和形状的新列添加到多索引 Pandas 数据框的每个第一级?

编辑:

这种方法df[('Foo', 'End')] = new['Foo'] df[('Bar', 'End')] = new['Bar'] 不是一个选项,因为在我的实际问题中,不是要添加两列,而是要添加数百列。

【问题讨论】:

  • 为什么要使用多索引?可能有更简单的方法来实现你想要的
  • 这能回答你的问题吗? Selecting columns from pandas MultiIndex
  • @TrentonMcKinney 不,我的问题不是关于选择,而是关于插入列
  • @anon01 那更简单的方法是?
  • 使用列代替多索引

标签: python pandas


【解决方案1】:
  • 多列名称作为Tuples 传递,例如df[('Foo', 'End')]
import pamadas as pd

# test data
col = pd.MultiIndex.from_arrays([['Foo', 'Bar'], ['Begin', 'Begin']], names=['First', 'Second'])
df = pd.DataFrame([[5, 1], [4, 4], [6, 6]], columns=col)
new = pd.DataFrame({'Foo': [1, 5, 7], 'Bar': [2, 4, 7]})

# write new columns
df[('Foo', 'End')] = new['Foo']
df[('Bar', 'End')] = new['Bar']

# display(df)
First    Foo   Bar Foo Bar
Second Begin Begin End End
0          5     1   1   2
1          4     4   5   4
2          6     6   7   7

对于多列

  • colnew中的列名,必须对应df中的顶级列名。
for col in new.columns:
    df[(col, 'new col name')] = new[col]

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 2020-03-12
    • 2018-12-06
    • 2019-01-16
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2015-05-14
    • 2016-05-03
    相关资源
    最近更新 更多