python - 将数据帧行聚合到字典中

标签 python pandas

我有一个 pandas DataFrame 对象,其中每一行代表图像中的一个对象。

可能行的一个示例是:

{'img_filename': 'img1.txt', 'img_size':'20', 'obj_size':'5', 'obj_type':'car'}

我想聚合属于同一图像的所有对象,并得到其行如下的内容:

{'img_filename': 'img1.txt', 'img_size':'20', 'obj': [{'obj_size':'5', 'obj_type':'car'}, {{'obj_size':'6', 'obj_type':'bus'}}]}

也就是说,第三列是包含每组数据的列列表。

我该怎么做?

编辑:

考虑以下示例。

import pandas as pd
df1 = pd.DataFrame([
{'img_filename': 'img1.txt', 'img_size':'20', 'obj_size':'5', 'obj_type':'car'}, 
{'img_filename': 'img1.txt', 'img_size':'20', 'obj_size':'6', 'obj_type':'bus'}, 
{'img_filename': 'img2.txt', 'img_size':'25', 'obj_size':'4', 'obj_type':'car'}
])

df2 = pd.DataFrame([
{'img_filename': 'img1.txt', 'img_size':'20', 'obj': [{'obj_size':'5', 'obj_type':'car'}, {'obj_size':'6', 'obj_type':'bus'}]},
{'img_filename': 'img2.txt', 'img_size':'25', 'obj': [{'obj_size':'4', 'obj_type':'car'}]}
])

我想将 df1 转换为 df2

最佳答案

使用 to_dict 的一种方法

df2 = df1.groupby('img_filename')['obj_size','obj_type'].apply(lambda x: x.to_dict('records'))
df2 = df2.reset_index(name='obj')

# Assuming you have multiple same img files with different sizes then I'm choosing first.
# If this not the case then groupby directly and reset index.
#df1.groupby('img_filename, 'img_size')['obj_size','obj_type'].apply(lambda x: x.to_dict('records'))

df2['img_size'] = df1.groupby('img_filename')['img_size'].first().values

print (df2)

  img_filename                                                obj img_size
0     img1.txt  [{'obj_size': '5', 'obj_type': 'car'}, {'obj_s...       20
1     img2.txt             [{'obj_size': '4', 'obj_type': 'car'}]       25

关于python - 将数据帧行聚合到字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436055/

相关文章:

python - 使用 moveToThread 在 PyQt5 中启动 QThreads。一个线程无法正常启动

python - OpenCV-Python 安装(缺少 ffmpeg)- Windows

python - 用Python求解积分微分耦合方程组

Pandas 系列 : Decrement DateTime by 100 Years

python - 如何使用 pandas tz_convert 转换为多个不同的时区

python - 如何将 csv 文件中的整数列表读取到 python 中而不将它们转换为字符串?

python - Scrapy,从 StubHub 抓取价格数据

python - 如何使用pandas实现vlookup交叉引用

Python Pandas print() 和 .to_csv() 截断结果

python - 试图在数据框中删除 NaN 索引行