我需要用多个字典扩展列表,但真的找不到方法...
这是 df 的样子:
ColumnA actions
A [{'link_click': '1'}, {'post_engagement': '1'}]
B [{'link_click': '13'}, {'post_engagement': '5'}, {'page_engagement': '7'}]
这就是我想要的输出:
ColumnA actions_Link_click actions_post_engagement actions_page_engagement
A 1 1 na
B 13 5 7
答案 0 :(得分:2)
首先合并每一行中的字典列表以创建与每一行对应的单个记录,然后从这些生成的记录创建一个新的数据框,现在添加前缀和join
新数据框与原始框>
records = [{k:v for d in l for k, v in d.items()} for l in df['actions']]
df.join(pd.DataFrame(records, index=df.index).add_prefix('actions_'))
Column A actions actions_link_click actions_post_engagement actions_page_engagement
0 A [{'link_click': '1'}, {'post_engagement': '1'}] 1 1 NaN
1 B [{'link_click': '13'}, {'post_engagement': '5'}, {'page_engagement': '7'}] 13 5 7
答案 1 :(得分:1)
这应该有效:
df = pd.concat([pd.DataFrame(x) for x in df['actions']], keys=df['ColumnA']).reset_index(level = 1, drop = True)
df = df.groupby('ColumnA').first(dropna = True)
如果您想要 actions
前缀,则:
df.columns = ['actions_' + s for s in df.columns]
答案 2 :(得分:0)
另一种可能是:
d = pd.DataFrame.from_records(df["actions"].apply(lambda x: {k: v for d in x for k, v in d.items()}).values)
d["ColumnA"] = df["ColumnA"]
首先,我将每一行的字典列表转换为一个字典。之后,我使用这些值并通过 from_records 创建一个新的 DataFrame,最后我再次将缺少的 ColumnA 添加到 DataFrame 中。