从Dataframe列中提取值

2024-05-04 09:03:39 发布

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

我有以下格式的数据帧:

cust_id, cust_details
101, [{'self': 'https://website.com/rest/api/2/customFieldOption/1', 'value': 'Type-A', 'id': '1'}, 
      {'self': 'https://website.com/rest/api/2/customFieldOption/2', 'value': 'Type-B', 'id': '2'}, 
      {'self': 'https://website.com/rest/api/2/customFieldOption/3', 'value': 'Type-C', 'id': '3'}, 
      {'self': 'https://website.com/rest/api/2/customFieldOption/4', 'value': 'Type-D', 'id': '4'}]
102, [{'self': 'https://website.com/rest/api/2/customFieldOption/5', 'value': 'Type-X', 'id': '5'}, 
      {'self': 'https://website.com/rest/api/2/customFieldOption/6', 'value': 'Type-Y', 'id': '6'}]

我试图为每个客户id提取所有客户详细信息值

预期产出:

cust_id, new_value
101,Type-A, Type-B, Type-C, Type-D
102,Type-X, Type-Y

Tags: 数据httpsselfcomrestapiid客户
1条回答
网友
1楼 · 发布于 2024-05-04 09:03:39

简单回答:

df['new_value'] = df.cust_details.apply(lambda ds: [d['value'] for d in ds])

更复杂、可能更好的答案:

与首先存储字典列表不同,我建议在原始数据框中将每个字典设置为一行

df = pd.concat([
        df['cust_id'], 
        pd.DataFrame(
            df['cust_details'].explode().values.tolist(), 
            index=df['cust_details'].explode().index
        )
     ], axis=1)

如果需要按id对值进行分组,可以通过标准groupby方法进行分组:

df.groupby('cust_id')['value'].apply(list)

这看起来可能更复杂,但根据您的用例,从长远来看可能会节省您的精力

相关问题 更多 >