【问题标题】:Data frame transformation in PandasPandas 中的数据框转换
【发布时间】:2020-10-14 23:09:30
【问题描述】:

我有以下要转换的数据框:

ID       Level        Band      Date
1        A            A1        2020-06-01
1        B            B1        2020-06-03
1        C            C1        2020-06-04

ID       First_Level      Second_Level    Third_Level  First_Band   Second_Band  Third_Band      First_Data   Second_Date     Third_Date
1        A                B                C           A1            B1          C1             2020-06-01   2020-06-03     2020-06-04

这是一个示例数据。有多个 ID、级别、波段和相关日期。如何实现这个问题的解决方案?

【问题讨论】:

  • 你有重复的ID吗?
  • @anky:不是所有的 ID 都是唯一的
  • 在这种情况下,我下面的答案应该适合你
  • 完美!我会在一段时间内检查并接受:) 谢谢
  • 我的代码中有错字.. 刚刚修复它

标签: python-3.x pandas pivot-table pandas-groupby


【解决方案1】:

这是动态重命名的另一种方法:

import inflect
e = inflect.engine()

s = df.set_index('ID').stack()
idx_1 = (s.index.get_level_values(1) + 
         s.groupby(s.index).cumcount().add(1).map(e.ordinal).radd('_'))
s.index = pd.MultiIndex.from_arrays((s.index.get_level_values(0),idx_1))
print(s.unstack())

【讨论】:

  • 我没有得到正确的输出形式。数据似乎是正确的,但我的输出结果是这样的:stackoverflow.com/questions/62580244/… 你能检查一下并告诉我原因吗?使用您的代码后,我这样做了: df_ = pd.DataFrame(s).T
  • @Django0602 我无法重现相同的内容,这回答了您所要求的方式,可能是您是否可以在问题中添加示例数据并显示您是如何到达那里的,这将有所帮助。我猜你最后不需要unstack ..?或s.unstack().reset_index().T,其中任何一个..
  • 你是完全正确的.. s.unstack() 工作。我犯了一个愚蠢的错误!
  • @Django0602 你能测试import natsort as ns然后df[ns.natsorted(df.columns)]
  • 太棒了!排序!
猜你喜欢
  • 2023-01-15
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2021-07-23
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多