Pandas-从“数据框”列中提取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas-从“数据框”列中提取值相关的知识,希望对你有一定的参考价值。

我具有以下格式的数据框:

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

我正在尝试为每个cust_id提取所有cust_detail值

预期输出:

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

简单答案:

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)

这似乎更复杂,但是从长远来看,这取决于您的用例,可以节省您的精力。

以上是关于Pandas-从“数据框”列中提取值的主要内容,如果未能解决你的问题,请参考以下文章

从 pandas 数据框列中查找所有正则表达式匹配项

从 pandas DataFrame 中的列中提取 JSON 数据

从熊猫数据框中提取在特定列中具有特定值的所有行

从 json 中提取日期和数字并将它们附加到 pandas 数据框

使用 BeautifulSoup 从表的前两列中提取日期并将它们排列在 Pandas 数据框中,没有重复

从 pandas 数据框中的多行中提取非 nan 值