You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:15:42