有效地压平熊猫的大型多义齿

时间:2018-11-05 21:52:03

标签: python pandas

我有一个非常大的DataFrame,看起来像这样:

                  A B 
SPH2008 3/21/2008 1 2
        3/21/2008 1 2 
        3/21/2008 1 2
SPM2008 6/21/2008 1 2 
        6/21/2008 1 2
        6/21/2008 1 2

我有以下代码,旨在将两个索引的唯一对展平并获取到新的DF中:

indeces = [df.index.get_level_values(0), df.index.get_level_values(1)]
tmp = pd.DataFrame(data=indeces).T.drop_duplicates()
tmp.columns = ['ID', 'ExpirationDate']
tmp.sort_values('ExpirationDate', inplace=True)

但是,此操作花费大量时间。有更有效的方法吗?

2 个答案:

答案 0 :(得分:2)

pandas.DataFrame.index.drop_duplicates

pd.DataFrame([*df.index.drop_duplicates()], columns=['ID', 'ExpirationDate'])

        ID ExpirationDate
0  SPH2008      3/21/2008
1  SPM2008      6/21/2008

使用无法以这种方式解包的旧版Python

pd.DataFrame(df.index.drop_duplicates().tolist(), columns=['ID', 'ExpirationDate'])

答案 1 :(得分:2)

IIUC,您还可以groupby进行多索引级别,然后根据需要的列创建一个数据框:

>>> pd.DataFrame(df.groupby(level=[0,1]).groups.keys(), columns=['ID', 'ExpirationDate'])
        ID ExpirationDate
0  SPH2008      3/21/2008
1  SPM2008      6/21/2008