基于ID将Pandas DataFrame中列的唯一值转换为列表并生成新DataFrame
解决方法:按ID分组聚合为唯一值列表
你可以通过groupby结合agg方法轻松实现这个需求,核心思路是按ID分组后,提取value和group列的唯一值并转为列表。
步骤1:导入Pandas并创建原始DataFrame
import pandas as pd df = pd.DataFrame({ 'ID': ['A', 'A', 'A', 'B', 'B', 'B', 'B'], 'value': [1, 1, 1, 1, 2, 2, 2], 'group': [1, 2, 3, 2, 2, 2, 3] })
步骤2:分组并生成唯一值列表
使用groupby('ID')按ID分组,对value和group列分别应用lambda x: list(pd.unique(x)),就能得到每个ID对应的唯一值列表:
df_new = df.groupby('ID').agg({ 'value': lambda x: list(pd.unique(x)), 'group': lambda x: list(pd.unique(x)) }).reset_index()
验证结果
运行代码后,df_new的输出完全符合你的预期:
print(df_new) # 输出: # ID value group # 0 A [1] [1, 2, 3] # 1 B [1, 2] [2, 3]
补充说明
pd.unique()会保留值首次出现的顺序,比用set()更贴合常规需求reset_index()用于把分组的ID从索引转回普通列,确保结构和预期一致
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

