我具有以下格式的数据框:
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 Dataframe:如何从 A 列中获取值以加入 B 列中列表的每个值?
• 如何从列中的列表类型值中获取最大值并在 pandas dataframe 中创建具有最大值的新列
• 如何(有效地)过滤 pandas 数据框,以便它在给定特定条件的情况下从特定列中提取数据?
• 从 jupyter notebook 中的 snowflake 中获取数据并从 dataframe 中匹配记录
• 如何从 Python 中的原始文本转换为 Pandas 数据框?
• 使用正则表达式从 pandas 数据框中的列中创建对字典
• 用 python 到 pandas 阅读 PDF 复选框