【问题标题】:Dropping duplicates from json deep structure pandas从 json 深层结构 pandas 中删除重复项
【发布时间】:2022-06-10 23:50:13
【问题描述】:

我正在研究将 excel 转换为嵌套 json 的方案,该方案将扩展到标题和项目。 尝试如下:

能够使用 pandas 应用转换规则:

df['Header'] = df[['A','B']].to_dict('records') 
df['Item'] = df[['A', 'C', 'D'].to_dict('records')

这样,我可以将记录分成单独的数据框。 在下面申请:

data_groupedby = data.groupby(['A', 'B']).agg(list).reset_index()
result = data_groupedby['A','B','Item'].to_json(orient='records') 

这给了我所需的带有标题的 json 以及作为嵌套深层结构的项目的进一步钻取。 使用 groupby,我可以对标题字段进行分组,但无法将分组依据应用于各个项目,并且无法正确分组。 关于我们如何实现它的任何想法。

示例 DS: 电子表格: A B C D 100 测试1 XX10 L 100 测试1 XX10 L 100 测试1 XX20 L 101 测试2 XX10 L 101 测试2 XX20 L 101 测试2 XX20 L

电流输出: [ { “一”:100, “B”:“测试1”, “物品”: [ { “一”:100, “C”:“XX10”, “D”:“L” }, { “一”:100, “C”:“XX10”, “D”:“L” }, { “一”:100, “C”:“XX20”, “D”:“L” } ] }, { “一”:101, “B”:“测试2”, “物品”: [ { “一”:101, “C”:“XX10”, “D”:“L” }, { “一”:101, “C”:“XX20”, “D”:“L” }, { “一”:101, “C”:“XX20”, “D”:“L” } ] } ]

如果您查看 Array Items,相同的值不会被分组并重复。

谢谢 TC

【问题讨论】:

  • 你能提供一个示例输入和一个示例所需的输出吗?
  • 嗨@965311532,Excel 中的示例输入:A B C D 100 Test1 XX10 L 100 Test1 XX10 L 100 Test1 XX20 L 101 Test2 XX10 L 101 Test2 XX20 L 101 Test2 XX20 L 我想将其转换为json 如下: [{A: 100, B: Test1, Item:[{C: XX10, D: L}, {C: XX10, D: L}]}, {A:101, B: Test2: Item: [{C: XX10, D: L}, {C:XX20, D:L]}] 我目前得到的内容如下:[{A: 100, B: Test1, Item:[{C: XX10, D : L},{C: XX10, D: L},{C: XX10, D: L}]}, {A:101, B: Test2: Item: [{C: XX10, D: L},{C :XX20, D:L}, {C:XX20, D:L}].}] 。感谢TC
  • @Chackraborty 请以正确的格式将其发布在问题中
  • 空间限制可能导致:
  • 在原始问题中更新。如果您看得更清楚,请检查一下。

标签: python pandas dataframe


【解决方案1】:

您可以先drop_duplicates,然后是groupby,然后对列CD 应用to_dict 转换,然后使用reset_indexrename 进行清理。

(data.drop_duplicates()
     .groupby(["A", "B"])
     .apply(lambda x: x[["C", "D"]].to_dict("records"))
     .to_frame()
     .reset_index()
     .rename(columns={0: "Item"})
     .to_dict("records"))

输出:

[{'A': 100,
  'B': 'Test1',
  'Item': [{'C': 'XX10', 'D': 'L'}, {'C': 'XX20', 'D': 'L'}]},
 {'A': 101,
  'B': 'Test2',
  'Item': [{'C': 'XX10', 'D': 'L'}, {'C': 'XX20', 'D': 'L'}]}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2020-01-13
    • 2021-02-24
    相关资源
    最近更新 更多