I have a dataframe like this:
datetime levels shear
2016-05-01 00:10:00 100 5
2016-05-01 00:10:00 200 6
2016-05-01 00:10:00 300 10
2016-05-01 00:10:00 400 11
2016-05-01 00:20:00 100 7
2016-05-01 00:20:00 300 10
2016-05-01 00:30:00 100 5
2016-05-01 00:30:00 200 9
2016-05-01 00:30:00 300 12
2016-05-01 00:30:00 400 15
2016-05-01 00:40:00 100 19
2016-05-01 00:40:00 200 2
2016-05-01 00:40:00 300 18
这段内容涉及IT技术,需要翻译的是“每10分钟间隔内不同高度的风切变”。我的任务是将其按照层次分组,然后计算每个层次连续出现的风切变。因此,首先我会创建另一列,用于记录每个层次连续数据之间的时间差:
data3_5['Delta'] = data3_5.sort_values(['levels','datetimes']).groupby('levels')['datetimes'].diff()
然后定义一个函数来执行连续出现相同时间差的滚动计数:
def rolling_count(val):
if val == rolling_count.previous:
rolling_count.count +=1
else:
rolling_count.previous = val
rolling_count.count = 1
return rolling_count.count
rolling_count.count = 0 #static variable
rolling_count.previous = None #static variable
应用函数并添加新列:
data3_5['count'] = data3_5.sort_values(['levels','datetimes']).groupby('levels')['index'].diff().apply(rolling_count)
然后最后打印输出结果:
group = data3_5.groupby('levels', as_index=False)
group_keys = sorted(list(group.groups.keys()))
for each in range(0,len(group_keys)):
group_result = group.get_group(group_keys[each])
print(group_result)
以下是部分结果:
datetime levels shear Delta count
2016-05-01 00:10:00 100 5 NaT 1
2016-05-01 00:20:00 100 7 00:10:00 1
2016-05-01 00:30:00 100 5 00:10:00 2
2016-05-01 00:40:00 100 19 00:10:00 3
datetime levels shear Delta count
2016-05-01 00:10:00 200 6 NaT 1
2016-05-01 00:30:00 200 9 00:20:00 1
2016-05-01 00:40:00 200 2 00:10:00 1
这不是期望的结果,存在两个问题: 1. 每个层级的第一个计数将被视为 NaT,因此下一个连续的值出现时将被视为第一次出现。 2. 类似于问题1,对于200级别,第三个结果应该计为2。
我该如何修复?谢谢。