【问题标题】:How to reorder levels columns in pandas?如何重新排序熊猫中的级别列?
【发布时间】:2022-01-23 08:25:13
【问题描述】:

此代码与我的代码相同,但我有 300 列,我需要像这样重新排序列: 每家公司的总利润、类别、销售商品数量。如果我的列很少,但正如我所说的,我有 300 个。

data = {'company': ['AMC', 'ER','CRR' , 'TYU'], 'Reg-ID': ['1222','2334','3444', '4566'], 'Total_provit': ['123300','12233', '3444444', '412222'], 'numberofgoodsold':['44','23','67','34'], Catgory: ['Tal','ERP','RTY close','ALL']}

d = pd.DataFrame(data)

d2 = d.pivot(index = 'Reg-ID', columns = 'company')

d2.columns = d2.columns.swaplevel(0, 1)
d2.sort_index(axis=1, level=0, inplace=True)

【问题讨论】:

  • d2 应该是你的出发点吗?我看不出Reg-ID 怎么可能成为故事中的索引器。这以某种方式无缘无故地将您的桌子与NaNs“对齐”。 IE。它创建了一个块对角表...但这可能超出您的控制范围...例如其他非科学家同事过去的工作...
  • 我没听懂你在说什么。但我有兴趣订购我的专栏。我的列在每个公司下以相同的顺序排列。我需要的是按新顺序为所有公司重新排序我的列。我有 22 家公司,每个公司都有 8 列。我如何为每家公司更改每 8 列。你明白我的想法了吗?
  • d2 应该是您的起点吗?根据我们是否必须处理dd2,解决您的问题不会产生相同的答案。你的问题很清楚。不清楚的是我们必须从哪个数据框开始。
  • d2 yes 是我的出发点。对不起
  • 执行d2.xs('TYU', axis=1, drop_level=False),你会发现除了最后一行,你到处都有NaNs。做d2.xs('AMC', axis=1, drop_level=False),与第一行同上。为什么 ?因为Reg-ID 反映了与公司名称相同的信息。那么问题来了:d2 真的是这样吗?还是试图为我们提供一个(错误形成的)可复制的玩具对象?

标签: python pandas data-analysis


【解决方案1】:

如下使用pandas.DataFrame.reindex怎么样

>>> desired_order = ['Total_provit', 'Catgory', 'numberofgoodsold']
>>> d2.reindex(desired_order, level=1, axis=1)
company          AMC          ...     TYU                 
        Total_provit Catgory  ... Catgory numberofgoodsold
Reg-ID                        ...                         
1222          123300     Tal  ...     NaN              NaN
2334             NaN     NaN  ...     NaN              NaN
3444             NaN     NaN  ...     NaN              NaN
4566             NaN     NaN  ...     ALL               34

【讨论】:

  • @Pythona 你删除了你的评论,说这种方法有效。我想你还有问题吗?否则为什么不勾选正确答案?
猜你喜欢
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2022-06-13
  • 2023-03-16
相关资源
最近更新 更多