"ValueError:无法从重复的轴重新索引"

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,所以根本没有经验.

谢谢!

Anz*_*zel 6

假设你有一个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',你应该没问题.

  • @Marzia你遇到的错误意味着你试图在现有索引上编制索引.尝试:`df = df.reset_index()`然后在代码上运行,看它是否有帮助 (2认同)