【发布时间】: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。我应该先按时间分组吗? -
那么我猜您的实际数据框与您的示例不同:在您的实际数据框中,您可能有两行或多行具有相同的
time和parameter值。对吗? -
这是一个从卫星数据下载的大数据集,所以可能有重复。有没有快速解决的方法?
-
是的,试试
df[df[['time', 'parameter']].duplicated(keep=False)]看看是否有任何返回。这将向您显示time和parameter的重复行