【问题标题】:Transform multiple CSV rows in Pandas into one将 Pandas 中的多个 CSV 行转换为一个
【发布时间】:2019-05-08 09:18:21
【问题描述】:

我刚开始使用 Pandas,我正在尝试将我拥有的数据文件制作成可以导出和读取的东西。我拥有的 CSV 格式如下:

time    |   parameter   |   value
------------------------------------
1       |       a       |   21
2       |       a       |   21
3       |       a       |   21
1       |       b       |   19
2       |       b       |   19
3       |       b       |   19
1       |       c       |   17
2       |       c       |   17
3       |       c       |   17

我想把它转换成如下形式:

time    |   a   |   b   |   c   
------------------------------------
1       |   21  |   19  |   17  
2       |   21  |   19  |   17  
3       |   21  |   19  |   17  
1       |   21  |   19  |   17  
2       |   21  |   19  |   17  
3       |   21  |   19  |   17  
1       |   21  |   19  |   17  
2       |   21  |   19  |   17  
3       |   21  |   19  |   17  

当然我的数据有不同的值,但上面的例子应该足够了。它是天气数据,例如温度和风速,每一行都有测量的时间戳、参数名称和值。

我想为每个时间戳将其转换为具有 3 列(如果有更多参数,则更多)的单行,其中列名是参数名。

我知道我必须按时间列对数据进行分组,所以我已经完成了 df.groupby('time')

但是,我不知道如何执行一个应用方法来获得我想要的结果。任何提示表示赞赏!

【问题讨论】:

  • 为什么不直接做df.pivot(index='time', columns='parameter')['value']
  • 谢谢@Chris。它给了我错误:ValueError: Index contains duplicate entries, cannot reshape。我应该先按时间分组吗?
  • 那么我猜您的实际数据框与您的示例不同:在您的实际数据框中,您可能有两行或多行具有相同的timeparameter 值。对吗?
  • 这是一个从卫星数据下载的大数据集,所以可能有重复。有没有快速解决的方法?
  • 是的,试试df[df[['time', 'parameter']].duplicated(keep=False)] 看看是否有任何返回。这将向您显示 timeparameter 的重复行

标签: python pandas csv


【解决方案1】:

你可以试试pivot table:

pd.pivot_table(df, index='time', columns='parameter', values='value')

parameter   a   b   c
time                 
1          21  19  17
2          21  19  17
3          21  19  17

【讨论】:

  • 谢谢!我不知道只有一个函数可以做我需要的事情。 pivot_table 在我的情况下有效,因为我在数据集中有重复的值,而普通的 pivot 没有。
猜你喜欢
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2019-12-14
  • 2022-11-17
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多