我的输入是一个Pandas DataFrame:

df = pd.DataFrame({'id': [11, 22],
 'name': ['foo', 'bar'],
 'class': ['c1', 'c2'],
 'date': ['01/07/2023', '14/05/2023'],
 'type': ['t1', 't2'],
 'attribute': ['a1', 'a2']})

   id name class        date type attribute
0  11  foo    c1  01/07/2023   t1        a1
1  22  bar    c2  14/05/2023   t2        a2

..和一个映射器(一本Python词典):

mapper = {
    "infos": ["name", "date"],
    "meta": ["class", "type", "attribute"]
}

我的预期输出是Pandas DataFrame(out):

   id                                  infos                                              meta
0  11  {"name": "foo", "date": "01/07/2023"}  {"class": "c1", "type": "t1", "attribute": "a1"}
1  22  {"name": "bar", "date": "14/06/2023"}  {"class": "c2", "type": "t2", "attribute": "a2"}

我开始做下面这样的事情,但似乎我的方式不正确.

df[mapper["infos"]].apply(lambda x: {x.name: x.tolist()})

name                  {'name': ['foo', 'bar']}
date    {'date': ['01/07/2023', '14/05/2023']}

任何帮助都将不胜感激,伙计们!

推荐答案

您可以循环mapper中的项,并将to_dict('records')DataFrame构造函数结合:

out = (df.drop(columns=[v for l in mapper.values() for v in l])
         .join(pd.DataFrame({k: df[v].to_dict('records') for k, v in mapper.items()},
                            index=df.index)
               )
       )

输出:

   id                                  infos                                              meta
0  11  {'name': 'foo', 'date': '01/07/2023'}  {'class': 'c1', 'type': 't1', 'attribute': 'a1'}
1  22  {'name': 'bar', 'date': '14/05/2023'}  {'class': 'c2', 'type': 't2', 'attribute': 'a2'}

Python相关问答推荐

在Python中为变量的缺失值创建虚拟值

配置Sweetviz以分析对象类型列,而无需转换

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

线性模型PanelOLS和statmodels OLS之间的区别

Django管理面板显示字段最大长度而不是字段名称

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

django禁止直接分配到多对多集合的前端.使用user.set()

我如何使法国在 map 中完全透明的代码?

如何在WSL2中更新Python到最新版本(3.12.2)?

如何将多进程池声明为变量并将其导入到另一个Python文件

Pandas—在数据透视表中占总数的百分比

多指标不同顺序串联大Pandas 模型

Polars asof在下一个可用日期加入

如何更改groupby作用域以找到满足掩码条件的第一个值?

旋转多边形而不改变内部空间关系

在matplotlib中使用不同大小的标记顶部添加批注

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

mdates定位器在图表中显示不存在的时间间隔

启动线程时,Python键盘模块冻结/不工作

仅取消堆叠最后三列