2017-09-21 81 views
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) 

我想然後使用列表調出每個時間戳的所有重複條目。從上面的代碼,有沒有一種很好的方式來調用與錯誤的布爾類型相關的索引?

編輯:增加了一個額外的數據框來創建一些獨特的值,並將第一個數據框增加了三倍,以創建多個單獨的重複。也爲該問題增加了更多細節。

回答

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 00:30:00' '2000-01-01 00: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')]