如何基于索引列执行pandas drop_duplicates

时间:2016-07-29 15:19:50

标签: datetime pandas duplicates time-series

在尝试根据日期时间索引的值执行时间序列的删除重复时,我正在撞墙。

我的功能如下:

DLXRD18LH1MK    A4F1E89AXXXX
DLXRF02CH1MK    A4F1E89AXXXX
DLXRK0C9H1MK    8489AD32XXXX
DLXRL0GPH1MK    8489AD34XXXX

由以下人员调用:

def csv_import_merge_T(f):
    dfsT = [pd.read_csv(fp,  index_col=[0], parse_dates=[0], dayfirst=True, names=['datetime','temp','rh'], header=0) for fp in files] 
    dfT = pd.concat(dfsT)
    #print dfT.head(); print dfT.index; print dfT.dtypes
    dfT.drop_duplicates(subset=index, inplace=True)
    dfT.resample('H').bfill()
    return dfT

我收到错误

inputcsvT = ['./input_csv/A08_KI_T*.csv']
for csvnameT in inputcsvT:
    files = glob.glob(csvnameT)
    print ('___'); print (files)
    t = csv_import_merge_T(files)
    print csvT

出了什么问题?

更新 当csv输入文件(要连接)重叠时,似乎会出现这个问题。

NameError: global name 'index' is not defined 获取文件

A08_KI_T5
28/05/2015 17:00,22.973,24.021
...
08/10/2015 13:30,24.368,45.974

A08_KI_T6
08/10/2015 14:00,24.779,41.526
...
2016年10月20日17:00,22.326,41.83

它运行正常,而:
inputcsvT = ['./input_csv/A08_KI_T*.csv']收集了 的 A08_LR_T5
28/05/2015 17:00,22,493,25.62
...
08/10/2015 13:30,24.296,44.596

A08_LR_T6
28/05/2015 17:00,22,493,25.62
...
2016年2月10日17:15,21.991,38.45
这会导致错误。

1 个答案:

答案 0 :(得分:2)

IIUC您可以再次致电reset_index然后drop_duplicates然后set_index

In [304]:
df = pd.DataFrame(data=np.random.randn(5,3), index=list('aabcd'))
df

Out[304]:
          0         1         2
a  0.918546 -0.621496 -0.210479
a -1.154838 -2.282168 -0.060182
b  2.512519 -0.771701 -0.328421
c -0.583990 -0.460282  1.294791
d -1.018002  0.826218  0.110252

In [308]:
df.reset_index().drop_duplicates('index').set_index('index')

Out[308]:
              0         1         2
index                              
a      0.918546 -0.621496 -0.210479
b      2.512519 -0.771701 -0.328421
c     -0.583990 -0.460282  1.294791
d     -1.018002  0.826218  0.110252

修改

实际上有一种更简单的方法是在索引上调用duplicated并将其反转:

In [309]:
df[~df.index.duplicated()]

Out[308]:
              0         1         2
index                              
a      0.918546 -0.621496 -0.210479
b      2.512519 -0.771701 -0.328421
c     -0.583990 -0.460282  1.294791
d     -1.018002  0.826218  0.110252