我有一个数据框,看起来像这样:
Air-line City Time ID
0 easyJet London 20:40 1
1 airberlin Berlin 10:30 2
2 Emarite Dubai 21:45 3
3 Qatar Airways Newyork 10:30 4
4 easyJet London 20:46 5
5 airberlin Berlin 10:34 6
.
.
.
.
99 Qatar Airways London 20:40 13
100 airberlin Berlin 10:32 20
我想做的是,我使用groupby并根据列ID从列“AirLines”、“City”和“Time”组成一个组,以更改列ID中的值。因此,在AirLine、City和Time中具有相同值的行应该具有相同的ID。为此,我有以下代码:
df['ID'] = df.groupby(['Air-line','City','Time'])['ID'].transform('first')
但问题是,我想更改代码,这样不仅要包括“Time”列中的确切值,还要包括+6或-6分钟之间的差值
我所期望的是:
Air-line City Time ID
0 easyJet London 20:40 1
1 airberlin Berlin 10:30 2
2 Emarite Dubai 21:45 3
3 Qatar Airways Newyork 10:30 4
4 easyJet London 20:46 1
5 airberlin Berlin 10:34 2
.
.
.
.
99 Qatar Airways London 20:40 13
100 airberlin Berlin 10:32 2
你能告诉我如何添加这个条件吗?任何帮助都将不胜感激。 非常感谢
您可以使用6分钟的步骤对
time
列进行分类,如下所示。 我在这里使用pandas.cut
函数。 作为bins
,我传递从pd.date_range
检索到的一系列datetime对象。 在pd.cut
中,我使用right=False
包含区间左侧的点,并排除区间右侧的点我使用了一个小数据帧作为示例,但您会明白这一点
输出
无日期装箱
还有另一种方法。 您提到需要避免在分组中使用日期。 不幸的是,我没有使用pandas内部结构来扩展解决方案。 但这可以通过另一种方式实现
让我们从00:00到23:54手动创建
bins
,并为它们分配密钥。 然后我们将使用categorize
函数将相应的键分配给时间值。 注意,这里我创建了new_time
列,它利用了time.strptime
转换。 就是这个专栏,然后我对它进行分类输出
相关问题 更多 >
编程相关推荐