2017-09-21 3 views
1

を重複したインデックスエントリのリストを作成します。私は、タイムスタンプ文字列のリストを作成したい。可能であれば、重複しているタイムスタンプごとに1つのタイムスタンプを返したいと思います。私はインデックス内のスタンプが重複していた時間を識別しようとしているパンダのデータフレームに

#required packages 
import os 
import pandas as pd 
import numpy as np 
import datetime 

# create sample time series 
header = ['A','B','C','D','E'] 
period = 5 
cols = len(header) 

dates = pd.date_range('1/1/2000', periods=period, freq='10min') 
dates2 = pd.date_range('1/1/2022', periods=period, freq='10min') 
df = pd.DataFrame(np.random.randn(period,cols),index=dates,columns=header) 
df0 = pd.DataFrame(np.random.randn(period,cols),index=dates2,columns=header) 
df1 = pd.concat([df]*3)               #creates duplicate entries by copying the dataframe 
df1 = pd.concat([df1, df0]) 
df2 = df1.sample(frac=1)              #shuffles the dataframe 
df3 = df1.sort_index()               #sorts the dataframe by index 

print(df2) 
#print(df3) 

# Identifying duplicated entries 

df4 = df2.duplicated() 

print(df4) 

リストを使用して、タイムスタンプごとにすべての重複エントリを呼び出したいとします。上記のコードから、bool型に関連するインデックスをfalseに呼び出す方法はありますか?

編集:いくつかのユニークな価値を創造するために余分なデータフレームを追加し、単一repeat.Alsoが質問に詳細を追加した以上のものを作成するために、最初のデータフレームを三倍。

答えて

1
In [46]: df2.drop_duplicates() 
Out[46]: 
          A   B   C   D   E 
2000-01-01 00:00:00 0.932587 -1.508587 -0.385396 -0.692379 2.083672 
2000-01-01 00:40:00 0.237324 -0.321555 -0.448842 -0.983459 0.834747 
2000-01-01 00:20:00 1.624815 -0.571193 1.951832 -0.642217 1.744168 
2000-01-01 00:30:00 0.079106 -1.290473 2.635966 1.390648 0.206017 
2000-01-01 00:10:00 0.760976 0.643825 -1.855477 -1.172241 0.532051 

In [47]: df2.drop_duplicates().index.tolist() 
Out[47]: 
[Timestamp('2000-01-01 00:00:00'), 
Timestamp('2000-01-01 00:40:00'), 
Timestamp('2000-01-01 00:20:00'), 
Timestamp('2000-01-01 00:30:00'), 
Timestamp('2000-01-01 00:10:00')] 
+0

これは本当によく働き、他の答えのいずれよりももう少し柔軟性があります。タイムスタンプのリストを文字列に変換する簡単な方法はありますか?私はto_stringを使用しようとしましたが、リストにはその属性がありません。基本的にタイムスタンプのリストを次のように作成します: ['2000-01-01 00:00:00' '2000-01-01 00:40:00' '2000-01-01 00:20:00 「 '2000-01-01午前0時30分00秒' '2000-01-01午前0時10分00秒'] –

1

IIUC:

df4[~df4] 

出力:タイムスタンプの

2000-01-01 00:10:00 False 
2000-01-01 00:00:00 False 
2000-01-01 00:40:00 False 
2000-01-01 00:30:00 False 
2000-01-01 00:20:00 False 
dtype: bool 

リスト、

df4[~df4].index.tolist() 

出力:

[Timestamp('2000-01-01 00:10:00'), 
Timestamp('2000-01-01 00:00:00'), 
Timestamp('2000-01-01 00:40:00'), 
Timestamp('2000-01-01 00:30:00'), 
Timestamp('2000-01-01 00:20:00')] 
関連する問題