data = {
'my_index': [1, 2],
'start': ['2023-12-28 00:00:00', '2023-12-29 00:00:00'],
'target': [['value1', 'value2'], ['value3']],
'dynamic_feat': [[['feat1', 'feat2'], ['feat3']], [['feat4']]]
}

df = pd.DataFrame(data)
pd.DataFrame.from_dict(data)

预期的jsonline格式:

{
    "my_index": 1, 
    "features": {
                    "start": "2023-12-28 00:00:00", 
                    "target": [], 
                    "dynamic_feat": [[]]
                }
}
...

我有一个数据,需要1列是独立的关键字,而其余的列要分组为"要素".实现这一目标的最佳方式是什么?

数据是巨大的,所以我不能通过简单的迭代来实现这一点.最初,我使用_json来创建部分特征,但现在我需要将其与my_index进行匹配.我不确定是否有什么时髦的方法可以做到这一点!

推荐答案

要做到这一点,一种方法是将每一行转换为多级别DICT的函数赋apply,然后逐行转换为JSON:

out = (df
    .apply(lambda r:{ 'my_index' : r['my_index'], 'features' : r.drop(index='my_index').to_dict() }, axis=1)
    .to_json(orient='records', lines=True)
)

输出:

{
  "my_index":1,
  "features":{
    "start":"2023-12-28 00:00:00",
    "target":["value1","value2"],
    "dynamic_feat":[["feat1","feat2"],["feat3"]]
  }
}
{
  "my_index":2,
  "features":{
    "start":"2023-12-29 00:00:00",
    "target":["value3"],
    "dynamic_feat":[["feat4"]]
  }
}

如果每个my_index值可能有多行,则可以按my_index分组,将其他列转换为词典,然后逐行将结果系列转换为json.这给出了一个包含features个条目的列表,而不是上面的单个条目.

out = (df
    .groupby('my_index')
    .apply(lambda g:g.drop(columns='my_index').to_dict('records'))
    .reset_index(name='features')
    .to_json(orient='records', lines=True)
)

输出:

{
  "my_index":1,
  "features":[
    {
      "start":"2023-12-28 00:00:00",
      "target":["value1","value2"],
      "dynamic_feat":[["feat1","feat2"],["feat3"]]
    }
  ]
}
{
  "my_index":2,
  "features":[
    {
      "start":"2023-12-29 00:00:00",
      "target":["value3"],
      "dynamic_feat":[["feat4"]]
    }
  ]
}

Python相关问答推荐

Python tkinter关闭第一个窗口,同时打开第二个窗口

Asyncio与队列的多处理通信-仅运行一个协程

螺旋桨图上意外颠倒的次y轴

Python(Polars):使用之前的变量确定当前解决方案的Vector化操作

仅使用2种 colored颜色 创建热图

如何从格式为note:{neighbor:weight}的字典中构建networkx图?

使用Python C API重新启动Python解释器

使用imap-tools时错误,其邮箱地址包含域名中的非默认字符

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

Python -根据另一个数据框中的列编辑和替换数据框中的列值

有条件地采样我的大型DF的最有效方法

Python会扔掉未使用的表情吗?

比较2 PD.数组的令人惊讶的结果

如何制作10,000年及以后的日期时间对象?

如何请求使用Python将文件下载到带有登录名的门户网站?

如何使用pytest来查看Python中是否存在class attribution属性?

try 将一行连接到Tensorflow中的矩阵

如何在turtle中不使用write()来绘制填充字母(例如OEG)

Python列表不会在条件while循环中正确随机化'

名为__main__. py的Python模块在导入时不运行'