【发布时间】:2020-12-03 20:02:21
【问题描述】:
我正在尝试做某事,我想知道这是否可以在 Pandas 中完成,或者是否有更好的工具来完成这项工作(目前我只是使用直接 python)。这是起始数据:
# We have a listing of files for the movie Titanic
# And we want to break them into groups of similar titles,
# To see which of those are possible duplicates.
import pandas as pd
titanic_files = [
{"File": "Titanic_HD2398.mov", "Resolution": "HD", "FrameRate": 23.98, "Runtime": 102},
{"File": "Titanic1.mov", "Resolution": "SD", "FrameRate": 23.98, "Runtime": 102},
{"File": "Titanic1.mov", "Resolution": "HD", "FrameRate": 23.98, "Runtime": 102},
{"File": "Titanic.mov", "Resolution": "HD", "FrameRate": 24.00, "Runtime": 103},
{"File": "MY_HD2398.mov", "Resolution": "HD", "FrameRate": 23.98, "Runtime": 102}
]
df = pd.DataFrame(titanic_files)
我想按相似的数据对这些文件进行分组,从不折叠行级数据,例如:
-
第 1 步 -- 按分辨率分组
---- HD ---- File Resolution FrameRate RunTime Titanic_HD2398.mov HD 23.98 102 Titanic1.mov HD 23.98 102 Titanic.mov HD 24.00 103 MY_HD2398.mov HD 23.98 102 ---- SD ---- File Resolution FrameRate RunTime Titanic1.mov SD 23.98 102 -
第 2 步 -- 按帧率分组
---- HD ----------------------- +----------- 23.98 ------------ File Resolution FrameRate RunTime Titanic_HD2398.mov HD 23.98 102 Titanic1.mov HD 23.98 102 MY_HD2398.mov HD 23.98 102 +----------- 24.00 ------------ File Resolution FrameRate RunTime Titanic.mov HD 24.00 103 ---- SD ----------------------- + ---------- 23.98 ------------ File Resolution FrameRate RunTime Titanic1.mov SD 23.98 102
最后,我想为每个最小的分组提供单独的数据框。在python中,我目前正在使用以下数据结构进行此操作:
{
'GroupingKeys': [{File1WithinThatBucket}, {File2WithinThatBucket}, ...]
}
例如:
{
'HD+23.98' + [{'File': ...}],
'HD+24.00' + [{'File': ...}]
}
另外,请记住,我要分组的字段大约有 10-15 个,我刚刚在上述问题中包含了两个,所以这种方法需要非常概括(另外,一些匹配标准不准确,例如运行时可能会被存储在 +/- 2 秒之类的范围内,某些值可能为空,等等)。
回到最初的问题:在 Pandas 中可以做这样的事情吗?如果可以,怎么做?
【问题讨论】:
标签: python pandas group-by aggregation