【问题标题】:pandas - make multiple rows for each columnpandas - 为每列制作多行
【发布时间】:2017-03-24 15:03:19
【问题描述】:

我正在尝试使用 pandas 将一些数据转换为更有用的格式,从 .xls 到 .csv。

我已经像这样加载了数据:

xls = pd.ExcelFile('file.xls')

它返回一个看起来像这样的数据框:

Name    Event1    Date1    Event2    Date2    Event3    Date3
Joe     jump      1.1.13   skip      1.2.13   hop       1.3.14
Jack    skip      1.2.12   run       1.5.14   NA        NA

我想重新格式化数据,以便他们参与的每个事件的名称重复多次,并附上日期。即

Name    Event   Date
Joe     jump    1.1.13
Joe     skip    1.2.13

在某种程度上我可以删除所有 NA。我在 xcel 中有多个工作表,这就是为什么我想以这种方式连接所有内容。

有简单的命令还是我被 for 循环卡住了?

谢谢!

【问题讨论】:

标签: python pandas


【解决方案1】:

使用pd.lreshape,这是将宽格式DF 转换为长格式的首选方法。

此方法接受字典作为它的组参数,其中以某个前缀开头的列名聚集在一个完整的列下。

d = dict(Event=df.filter(regex="^Event").columns, Date=df.filter(regex="^Date").columns)
pd.lreshape(df, d)

【讨论】:

  • 不错的一个。你也可以使用dict(Event=df.columns[df.columns.str.startswith('Event')], Date=df.columns[df.columns.str.startswith('Date')])
  • 我知道,但我想保持简洁 ;-)
  • 我在 github:github.com/pandas-dev/pandas/blob/master/pandas/core/… 的代码中找不到其他文档;这个功能是不是太新了?
  • 是的,那是因为它不是公开记录的方法,并且仍处于实验阶段。 speculations 一直在讨论是使用 pd.lreshape 还是它的姊妹方法 pd.wide_to_long。同样,如果分组变量的长度不同,那么它就有可能给出错误的结果。
猜你喜欢
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2017-06-06
  • 1970-01-01
  • 2021-08-28
  • 2020-10-24
  • 2020-05-19
相关资源
最近更新 更多