- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的数据集上编写了这两个 groupby 函数,第一个函数对我的数据进行分组,并将数据的日期时间分隔为开始日期时间、结束日期时间。
这是数据集:
Blast Hole East Coordinate North Coordinate Collar Theoritical Depth Tag Detector ID Date and Time Detection_Location Detection Date & Time
64 16745.42 107390.32 2634.45 15.95 385656531 23-08-2018 2:39:34 PM CV23 2018-09-08 14:18:17
61 16773.48 107382.6 2634.68 16.18 385760755 23-08-2018 2:38:32 PM CV23 2018-09-08 14:24:19
63 16755.07 107387.68 2634.58 16.08 385262370 23-08-2018 2:39:30 PM CV23 2018-09-08 14:12:42
105 16764.83 107347.67 2634.74 16.24 385742468 23-08-2018 2:41:29 PM CV22 2018-09-06 20:02:46
100 16752.74 107360.32 2634.33 15.83 385112050 23-08-2018 2:41:08 PM CV22 2018-09-06 20:15:42
99 16743.1 107362.96 2634.36 15.86 385087366 23-08-2018 2:41:05 PM CV22 2018-09-06 20:49:21
35 16747.75 107417.68 2635.9 17.4 385453358 23-08-2018 2:36:09 PM CV22 2018-09-23 05:47:44
5 16757.27 107452.4 2636 17.5 385662254 23-08-2018 2:35:03 PM CV22 2018-09-23 05:01:12
19 16770.89 107420.83 2634.81 16.31 385826979 23-08-2018 2:35:50 PM CV22 2018-09-23 05:52:54
第二部分帮助我像以前一样将分组数据框中的所有列保留为逗号分隔。
我面临着如何将这两个代码组合成一个代码并执行操作的问题:
df2 = (df1.groupby([pd.Grouper(key = 'Detection Date & Time', freq = 'H'),df.Detection_Location])
['Detection Date & Time'].agg(['first','last','size'])).reset_index()
df2 = df1.groupby("Detection date & Hour").agg({
'Blast Hole': lambda x: ','.join([str(n) for n in x]),
'East Coordinate': lambda x: ','.join([str(n) for n in x]),
'North Coordinate': lambda x: ','.join([str(n) for n in x]),
'Tag Detector ID': lambda x: ','.join([str(n) for n in x]),
'Detection_Location': lambda x: min(x),
'Detection Date & Time' : lambda x: len(x)}).reset_index().rename(columns = {'Detection Date & Time' : 'Tags'})
这是期望的结果:
Detection_Location_ first last size Blast Hole East Coordinate North Coordinate Tag Detector ID
CV22 2018-09-06 20:02:46 2018-09-06 20:49:21 3 105,100,99 16764.83,16752.74,16743.1 107347.67,107360.32,107362.96 385742468,385112050,385087366
CV23 2018-09-08 14:12:42 2018-09-08 14:24:19 3 64,61,63 16745.42,16773.48,16755.07 107390.32,107382.6,107387.68 385656531,385760755,385262370
CV22 2018-09-23 05:01:12 2018-09-23 05:52:54 3 35,5,19 16747.75,16757.27,16770.89 107417.68,107452.4,107420.83 385453358,385662254,385826979
最佳答案
第一个想法是,groupby
中是否需要不同的值 - 第一个 df21
带有 Grouper
,第二个仅带有 Grouper
:
df1['Date and Time'] = pd.to_datetime(df1['Date and Time'])
df1['Detection Date & Time'] = pd.to_datetime(df1['Detection Date & Time'])
df21 = (df1.groupby([pd.Grouper(key = 'Detection Date & Time', freq = 'H'),
df1.Detection_Location])
['Detection Date & Time'].agg(['first','last','size']))
#print (df21)
f = lambda x: ','.join(x.astype(str))
df22=(df1.groupby(pd.Grouper(key = 'Detection Date & Time', freq = 'H')).agg({
'Blast Hole': f,
'East Coordinate': f,
'North Coordinate': f,
'Tag Detector ID': f,
'Detection_Location': 'min',
'Detection Date & Time' : 'size'})
.dropna()
.rename(columns = {'Detection Date & Time' : 'Tags'})
.set_index('Detection_Location', append=True))
#print (df22)
<小时/>
df = pd.merge(df21, df22, left_index=True, right_index=True).reset_index()
print (df)
Detection Date & Time Detection_Location first \
0 2018-09-06 20:00:00 CV22 2018-09-06 20:02:46
1 2018-09-08 14:00:00 CV23 2018-09-08 14:18:17
2 2018-09-23 05:00:00 CV22 2018-09-23 05:47:44
last size Blast Hole East Coordinate \
0 2018-09-06 20:49:21 3 105,100,99 16764.83,16752.74,16743.1
1 2018-09-08 14:12:42 3 63,64,61 16755.07,16745.42,16773.48
2 2018-09-23 05:52:54 3 5,35,19 16757.27,16747.75,16770.89
North Coordinate Tag Detector ID Tags
0 107347.67,107360.32,107362.96 385742468,385112050,385087366 3
1 107387.68,107390.32,107382.6 385262370,385656531,385760755 3
2 107452.4,107417.68,107420.83 385662254,385453358,385826979 3
编辑:
如果需要按Grouper
和列一起分组:
df1['Date and Time'] = pd.to_datetime(df1['Date and Time'])
df1['Detection Date & Time'] = pd.to_datetime(df1['Detection Date & Time'])
f = lambda x: ','.join(x.astype(str))
df2=(df1.groupby([pd.Grouper(key='Detection Date & Time',freq='H'),
df1.Detection_Location]).agg({
'Blast Hole': f,
'East Coordinate': f,
'North Coordinate': f,
'Tag Detector ID': f,
'Detection Date & Time' : ['first','last','size']})
.reset_index()
.rename(columns = {'Detection Date & Time' : '', '<lambda>':''}))
df2.columns = df2.columns.map(''.join)
df2 = df2.rename(columns = {'' : 'Detection Date & Time'})
<小时/>
print (df2)
Detection Date & Time Detection_Location Blast Hole \
0 2018-09-06 20:00:00 CV22 105,100,99
1 2018-09-08 14:00:00 CV23 64,61,63
2 2018-09-23 05:00:00 CV22 35,5,19
East Coordinate North Coordinate \
0 16764.83,16752.74,16743.1 107347.67,107360.32,107362.96
1 16745.42,16773.48,16755.07 107390.32,107382.6,107387.68
2 16747.75,16757.27,16770.89 107417.68,107452.4,107420.83
Tag Detector ID first last size
0 385742468,385112050,385087366 2018-09-06 20:02:46 2018-09-06 20:49:21 3
1 385656531,385760755,385262370 2018-09-08 14:18:17 2018-09-08 14:12:42 3
2 385453358,385662254,385826979 2018-09-23 05:47:44 2018-09-23 05:52:54 3
关于python - 组合 Groupby 功能代码(带和不带 grouper),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57550770/
我的意思是: 给定输入的数字集: 1,2,3,4,5 变成“1-5”。 1,2,3,5,7,9,10,11,12,14 变成“1-3, 5, 7, 9-12, 14” 这是我想出的最好的:[C#] 我
考虑一个具有 MultiIndex 的系列,该系列在级别 0 上提供自然分组值,在级别 1 上提供时间序列: s = pd.Series(range(12), index=pd.MultiIndex.
从这里开始: https://docs.python.org/3/library/itertools.html#itertools-recipes def grouper(iterable, n, f
我有每月的时间序列数据,这些数据既缺少一些条目,又由于其他原因分散了 NaN 值。我需要将数据汇总到季度和年度系列中,但我不想报告缺少数据的季度/年度数据。例如,在下面的数据中,我不想报告 2014
难道 pandas.Grouper 只被认为是用于日期?或者它也可以用于整数吗? 我想将 pandas.Grouper 与 pandas.pivot_table 结合使用。以下是有关如何将 panda
我有一个像这样的示例数据框: import pandas as pd df = pd.DataFrame({"id": [0]*5 + [1]*5, "time": ['20
我有一个时间序列,我正在将其重新采样为 5s 窗口,如下所示: INDEX size price 2018-05-07 21:53:13.731
我有一个数据集,我想按列和数据集中每个月的数据进行分组。我使用 pd.Grouper() 作为每月分组日期部分。 df.groupby(['A',pd.Grouper(key='date', freq
我正在尝试将 x 天的组放在另一列的组中。出于某种原因,当我添加另一级别的分组时,分组行为发生了变化。 参见下面的玩具示例: 创建一个包含 40 个连续日期、一个 ID 列和随机值的随机数据框: im
我搜索了 stackoverflow 以了解如何按月对 DateTime 进行分组,但出于某种原因我一直收到此错误,即使在我通过 pd.to.datetime 传递数据帧之后也是如此 TypeErro
我是Python新手。在阅读 python 标准库引用时,我对 itertools 食谱部分中的 grouper() 示例感到困惑。 我尝试将示例代码放入一个小程序中,如下所示: from itert
我正在尝试学习如何在 Python 中使用 itertools.groupby,我想找到每组字符的大小。起初我试图看看我是否可以找到单个组的长度: from itertools import grou
我有这个 Pandas 数据框 datetime machineID errorID 0 2015-01-06 03:00:00 1 error3 1
以下数据以5分钟为间隔 数据框名称为 df: 脚本 ID 约会时间 打开 高的 低的 关闭 体积 0 201 2019-02-04 14:55:00 1408.05 1408.05 1407 1408
我在我的数据集上编写了这两个 groupby 函数,第一个函数对我的数据进行分组,并将数据的日期时间分隔为开始日期时间、结束日期时间。 这是数据集: Blast HoleEast Coordinate
我有一个包含 38 列的数据框,其中一列是时间。我建立了一个bin框架空间 timeframe=['4-6','7-9','10-12','13-15','16-18','19-21','22-24'
我正在尝试获取每家医院每天的平均记录数。 |Hospital|Date|Number of Records 0|Hospital B|2018-02-12 16:07:54.183|5 1|Hospi
我有一个带有每小时时间戳的 DataFrame: 2019-01-01 0:00:00 1 2019-01-01 1:00:00 2 2019-01-1
我有这样的代码: y1 = data.groupby(['name', pd.Grouper(key='datetime', freq='15d')])['ext price'].mean() y=p
你好,我正在使用 Python 的 itertools 中的 Grouper 函数来削减大块的 select where in(idlist) 查询以提高 sqlite 性能。问题是石斑鱼填满了 ch
我是一名优秀的程序员,十分优秀!