【发布时间】:2022-02-03 00:54:07
【问题描述】:
我有以下数据框,其中 col2 是一个字典,其中包含一个元组列表作为值。键在整个数据框中始终“添加”和“删除”。
输入df
| col1 | col2 |
|---|---|
| value1 | {'added': [(59, 'dep1_v2'), (60, 'dep2_v2')], 'deleted': [(59, 'dep1_v1'), (60, 'dep2_v1')]} |
| value 2 | {'added': [(61, 'dep3_v2')], 'deleted': [(61, 'dep3_v1')]} |
这是一个可复制粘贴的示例数据框:
jsons = ["{'added': [(59, 'dep1_v2'), (60, 'dep2_v2')], 'deleted': [(59, 'dep1_v1'), (60, 'dep2_v1')]}",
"{'added': [(61, 'dep3_v2')], 'deleted': [(61, 'dep3_v1')]}"]
df = pd.DataFrame({"col1": ["value1", "value2"], "col2": jsons})
编辑
col2 直接来自diff_parsed field of pydriller 输出
我想“分解” col2 以获得以下结果:
期望的输出
| col1 | number | added | deleted |
|---|---|---|---|
| value1 | 59 | dep1_v2 | dep1_v1 |
| value1 | 60 | dep2_v2 | dep2_v1 |
| value2 | 61 | dep3_v2 | dep3_v1 |
到目前为止,我尝试了以下方法:
df = df.join(pd.json_normalize(df.col2))
df.drop(columns=['col2'], inplace=True)
上面的代码被简化了。我首先操作该列以转换为正确的 json。它试图首先在“添加”和“删除”上爆炸,然后尝试使用格式来获得我想要的......但是元组列表没有保留,我得到以下内容:
| col1 | added | deleted |
|---|---|---|
| value1 | 59, dep1_v2, 60, dep2_v2 | 59, dep1_v1, 60, dep2_v1 |
| value2 | 61, dep3_v1 | 61, dep3_v2 |
谢谢
【问题讨论】: