如何用Pandas基于Permno列提取多列的唯一记录?
解决方案
方法1:直接保留所有唯一行
如果需要去除CSV中完全重复的行,直接用drop_duplicates()即可,它会自动保留所有列的唯一组合:
import pandas as pd df = pd.read_csv('sp_comp_date.csv') # 去除所有完全重复的行 df_unique = df.drop_duplicates() # 若需仅基于特定列(比如permno、ticker、date)判断重复,可指定subset参数 # df_unique = df.drop_duplicates(subset=['permno', 'ticker', 'date']) print(df_unique)
方法2:按Permno分组提取多列唯一值集合
如果要像原代码那样,每个Permno对应其他列的唯一值数组(比如一个Permno对应多个ticker/日期),用groupby.agg()可以同时处理多列:
import pandas as pd df = pd.read_csv('sp_comp_date.csv') # 假设另外两列是ticker和date,对每列提取唯一值 df_grouped = df.groupby('permno').agg({ 'ticker': 'unique', 'date': 'unique' # 替换成你实际的第二列名称 }) print(df_grouped)
输出会以permno为索引,每列对应该Permno下的唯一值数组,和原代码格式一致但扩展到了多列。
方法3:将唯一值展开为单独行
如果需要把每个Permno对应的唯一值拆分成独立行(比如原输出中10005.0对应的[IR, TT]拆成两行),可以先去重再排序,或者用explode:
import pandas as pd df = pd.read_csv('sp_comp_date.csv') # 保留permno和ticker的唯一组合,展开成单行 df_expanded = df.drop_duplicates(subset=['permno', 'ticker']).sort_values('permno') print(df_expanded) # 若要同时处理多列的展开(比如date也有多个唯一值),可先分组取唯一再展开 df_grouped = df.groupby('permno').agg({'ticker': 'unique', 'date': 'unique'}).reset_index() df_expanded = df_grouped.explode(['ticker', 'date']) print(df_expanded)
内容的提问来源于stack exchange,提问作者Shubham Dubey
相关产品推荐
相关产品推荐

