【问题标题】:Regrouping pandas multiindex columns重新组合 pandas 多索引列
【发布时间】:2017-12-14 14:35:54
【问题描述】:

我遇到了一个问题,将新列添加到多索引列 DataFrame 会导致新列附加到 DataFrame 的末尾。例如:

Group 1         | Group 2        | Group 1 | Group 2 |
------------------------------------------------------
Sub 1  | Sub 2  | Sub 1  | Sub 2 | New Sub | New Sub |

而我想要的是:

Group 1                   | Group 2                  |
------------------------------------------------------
Sub 1  | Sub 2  | New Sub | Sub 1  | Sub 2 | New Sub |

有没有办法重新分组/订购我的多索引来做到这一点?注意 - 我不想按名称重新排序子组,因为新子需要放在最后,并且按字母顺序可能无法正确排序。

【问题讨论】:

  • 如何设置?

标签: python pandas dataframe multi-index


【解决方案1】:

我认为您需要 reindexreindex_axis 自定义 list

df1=pd.DataFrame(columns=pd.MultiIndex.from_product((('C','R', 'A'),(1,2))),
                 data=np.arange(6).reshape(1,-1))
df2=pd.DataFrame(columns=pd.MultiIndex.from_tuples((('C','3'),('R',5),('A',4))),
                 data=[[9,9,4]])
df=df1.join(df2)
print (df)
  C     R     A     C  R  A
   1  2  1  2  1  2  3  5  4
0  0  1  2  3  4  5  9  9  4

df1 = df.reindex(columns = ['C','R','A'], level=0)
print (df1)
   C        R        A      
   1  2  3  1  2  5  1  2  4
0  0  1  9  2  3  9  4  5  4

df1 = df.reindex_axis(['C','R','A'], level=0, axis=1)
print (df1)
   C        R        A      
   1  2  3  1  2  5  1  2  4
0  0  1  9  2  3  9  4  5  4

【讨论】:

  • jezrael,方法 1 和 2 有什么区别?
  • 我觉得没什么(也许我错了),替代解决方案。
  • 但我个人更喜欢reindex_axis,但我无法解释原因;)
  • 优秀。我最终使用了df1=df.reindex(columns=df.columns.levels[0], level=0),因为分组因导入的文件而异。这似乎保留了顺序,同时正确地重新组合了所有内容。谢谢!
【解决方案2】:

您只需在设置后拨打df.sort_index即可:

df1=pd.DataFrame(columns=pd.MultiIndex.from_product((('a','b'),
(1,2))),data=np.arange(4).reshape(1,-1))
df2=pd.DataFrame(columns=pd.MultiIndex.from_tuples((('a','3'),('b',5))),data=[[9,9]])
df=df1.join(df2)

#    a     b     a  b
#    1  2  1  2  3  5
# 0  0  1  2  3  9  9

df.sort_index(axis=1,inplace=True)

#    a        b      
#    1  2  3  1  2  5
# 0  0  1  9  2  3  9

【讨论】:

    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2018-06-30
    • 2023-03-24
    • 2019-03-26
    • 2019-02-02
    • 2012-10-09
    相关资源
    最近更新 更多