有效地展平大Pandas的大型多维体

2024-09-29 01:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

                  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)

但是,此操作需要相当长的时间。有没有更有效的方法


Tags: 数据代码dataframedfgetindexleveltmp
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

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'])

相关问题 更多 >