Mar*_*zia 6 python pandas reindex
我有以下df:
Timestamp A B C ...
2014-11-09 00:00:00 NaN 1 NaN NaN
2014-11-09 00:00:00 2 NaN NaN NaN
2014-11-09 00:00:00 NaN NaN 3 NaN
2014-11-09 08:24:00 NaN NaN 1 NaN
2014-11-09 08:24:00 105 NaN NaN NaN
2014-11-09 09:19:00 NaN NaN 23 NaN
Run Code Online (Sandbox Code Playgroud)
我想做以下几点:
Timestamp A B C ...
2014-11-09 00:00:00 2 1 3 NaN
2014-11-09 00:01:00 NaN NaN NaN NaN
2014-11-09 00:02:00 NaN NaN NaN NaN
... NaN NaN NaN NaN
2014-11-09 08:23:00 NaN NaN NaN NaN
2014-11-09 08:24:00 105 NaN 1 NaN
2014-11-09 08:25:00 NaN NaN NaN NaN
2014-11-09 08:26:00 NaN NaN NaN NaN
2014-11-09 08:27:00 NaN NaN NaN NaN
... NaN NaN NaN NaN
2014-11-09 09:18:00 NaN NaN NaN NaN
2014-11-09 09:19:00 NaN NaN 23 NaN
Run Code Online (Sandbox Code Playgroud)
那就是:我想用相同的时间戳(我有17列)合并列,以1分钟的粒度重新采样,对于那些没有值的列,我希望有NaN.
我从以下方面开始:
df.groupby('Timestamp').sum()
Run Code Online (Sandbox Code Playgroud)
和
df = df.resample('1Min', how='max')
Run Code Online (Sandbox Code Playgroud)
但是我得到了以下错误:
ValueError: cannot reindex from a duplicate axis
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?我只是在学习Python,所以根本没有经验.
谢谢!
假设你有一个Timestamp
索引开始,你需要先做重新采样,然后reset_index
在做之前groupby
,这是工作样本:
import pandas as pd
df
A B C ...
Timestamp
2014-11-09 00:00:00 NaN 1 NaN NaN
2014-11-09 00:00:00 2 NaN NaN NaN
2014-11-09 00:00:00 NaN NaN 3 NaN
2014-11-09 08:24:00 NaN NaN 1 NaN
2014-11-09 08:24:00 105 NaN NaN NaN
2014-11-09 09:19:00 NaN NaN 23 NaN
df.resample('1Min', how='max').reset_index().groupby('Timestamp').sum()
A B C ...
Timestamp
2014-11-09 00:00:00 2 1 3 NaN
2014-11-09 00:01:00 NaN NaN NaN NaN
2014-11-09 00:02:00 NaN NaN NaN NaN
2014-11-09 00:03:00 NaN NaN NaN NaN
2014-11-09 00:04:00 NaN NaN NaN NaN
...
2014-11-09 09:17:00 NaN NaN NaN NaN
2014-11-09 09:18:00 NaN NaN NaN NaN
2014-11-09 09:19:00 NaN NaN 23 NaN
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
正如在评论中所说,你的'时间戳'不是日期时间,可能是字符串,所以你不能通过DatetimeIndex重新采样,只需重置并调整它如下所示:
df = df.reset_index()
df['ts'] = pd.to_datetime(df['Timestamp'])
# 'ts' is now datetime of 'Timestamp', you just need to set it to index
df = df.set_index('ts')
...
Run Code Online (Sandbox Code Playgroud)
现在再次运行前面的代码,但用'ts'替换'Timestamp',你应该没问题.
归档时间: |
|
查看次数: |
18098 次 |
最近记录: |