私は次の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
そして、私は以下を作りたいと思います:
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
つまり、同じタイムスタンプ(17列あります)の列をマージし、1分の粒度でリサンプリングし、値のない列についてはNaNにします。
私は次の方法で始めました:
df.groupby('Timestamp').sum()
そして
df = df.resample('1Min', how='max')
しかし、次のエラーが発生しました。
ValueError: cannot reindex from a duplicate axis
どうすればこの問題を解決できますか? 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
お役に立てれば。
コメントで述べたように、「タイムスタンプ」は日時ではなく、おそらく文字列であるため、DatetimeIndexでリサンプリングすることはできません。ただ、reset_indexして、次のように変換してください。
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')
...
ここで、前のコードを再度実行しますが、「Timestamp」を「ts」に置き換えれば、問題ないはずです。