我正在编写一个Python脚本来从我的数码相机导入图片,并且我正在使用Pandas来帮助记账传入的图像。我正在使用EXIF数据为单个图像标记信息,例如相机型号、图像模式、图像格式和相机获取图像的时间戳。这些数据用于将图像分离到目录结构中。我正在努力解决的是如何使用Pandas根据一组时间戳对图像进行分组,例如,这些时间戳都在彼此相隔半小时之内。举个例子,假设我有六张照片,其中三张是在相隔9分钟内拍摄的,另外三张也是在相隔9分钟内拍摄的,但都是在一小时后拍摄的。
import pandas
import datetime
rawdata = [{'filename': 'image_1.jpg',
'timestamp': datetime.datetime(2014, 11, 13, 19, 14, 16, 152847)},
{'filename': 'image_2.jpg',
'timestamp': datetime.datetime(2014, 11, 13, 19, 17, 16, 152847)},
{'filename': 'image_3.jpg',
'timestamp': datetime.datetime(2014, 11, 13, 19, 20, 16, 152847)},
{'filename': 'image_4.jpg',
'timestamp': datetime.datetime(2014, 11, 13, 20, 14, 16, 152847)},
{'filename': 'image_5.jpg',
'timestamp': datetime.datetime(2014, 11, 13, 20, 17, 16, 152847)},
{'filename': 'image_6.jpg',
'timestamp': datetime.datetime(2014, 11, 13, 20, 20, 16, 152847)}]
df = pandas.DataFrame(rawdata)
有没有一种自动的方法可以用半小时的阈值来划分这个数据帧,这样我就可以在一个数据帧中有image_1、image_2和image_3,在第二个数据帧中有image_4、image_5和image_6?
IIUC,一种方法是使用diff-compare-cumsum
习惯用法获取集群编号,然后您可以使用这些编号来groupby
:
>>> df = df.sort("timestamp")
>>> cluster = (df["timestamp"].diff() > pd.Timedelta(minutes=30)).cumsum()
>>> dfs = [v for k,v in df.groupby(cluster)]
>>> for clust in dfs:
... print(clust)
...
filename timestamp
0 image_1.jpg 2014-11-13 19:14:16.152847
1 image_2.jpg 2014-11-13 19:17:16.152847
2 image_3.jpg 2014-11-13 19:20:16.152847
filename timestamp
3 image_4.jpg 2014-11-13 20:14:16.152847
4 image_5.jpg 2014-11-13 20:17:16.152847
5 image_6.jpg 2014-11-13 20:20:16.152847
这是因为False~0和True~1有效,因此如果我们每次发现新群集时,将某个值的累计和取为1,我们将得到所需的ID:
>>> df["timestamp"].diff()
0 NaT
1 00:03:00
2 00:03:00
3 00:54:00
4 00:03:00
5 00:03:00
Name: timestamp, dtype: timedelta64[ns]
>>> df["timestamp"].diff() > pd.Timedelta(minutes=30)
0 False
1 False
2 False
3 True
4 False
5 False
Name: timestamp, dtype: bool
>>> (df["timestamp"].diff() > pd.Timedelta(minutes=30)).cumsum()
0 0
1 0
2 0
3 1
4 1
5 1
Name: timestamp, dtype: int64
我有一个pandas数据帧像: 我想按第一列进行分组,并将第二列作为行中的列表:
我有一个数据帧,我想按两个参数分组(1)相同的第一列中的连续编号和(2)第二列中的匹配值 数据帧: 组1包括前2行,因为30和31是连续的,第二列匹配。创建组2是因为Col1中的31和35不是连续的。创建组3是因为H和E不匹配。 在pandas groupby中对列表中的行进行分组 我很感谢你给我的建议
本文向大家介绍如何使用grepl函数对R数据帧的行进行子集化?,包括了如何使用grepl函数对R数据帧的行进行子集化?的使用技巧和注意事项,需要的朋友参考一下 R中的grepl函数在R数据帧的字符向量或列的每个元素内搜索与参数模式的匹配项。如果我们想使用grepl对R数据帧的行进行子集化,则可以通过访问包含字符值的列来使用带有单方括号和grepl的子集。 例1 请看以下数据帧: 输出结果 通过在x
Hazelcast文档中说明了集群组: 您可以创建群集组。为此,请使用group configuration元素。 通过指定组名和组密码,可以以简单的方式分隔集群。示例分组可以按开发、生产、测试、应用程序等进行。 具有相同组配置(即相同组名和密码)的集群成员(节点)和客户端形成私有集群。 每个集群都有自己的组,不会干扰其他集群。 但没有关于数据分区的详细信息。 如果我有5个节点和2个群集组: no
我想按多个列对熊猫数据框进行分组。每个Row都有一个整数、一个Name和一个额外的数值。我希望最终的Dataframe包含Name具有最高整数的每一行。 通过分组数据帧,只有第0行应该消失。第3行和第4行仍应包括在数据框中。
问题内容: 我有一个属于每个小组的球员名单。如何使用过滤器列出每个组的用户? 我在寻找这个结果: team alpha Gene team beta George Paula team gamma Steve Scruath of the 5th sector 问题答案: 可以使用angular.filter模块的groupBy。 因此您可以执行以下操作: JS: HTML: 结果: Group