2
我有這樣一個數據幀:如何統計時間段的連續出現? - 熊貓蟒
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
其在每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.
我該如何解決這個問題?謝謝。
謝謝斯科特,你的解決方案是很清楚直截了當,我會試一試。我認爲直接將groupby結果作爲新列添加到原始數據框中會比使用get_group之後獲得groupby結果要好得多,哪些更難處理,您的建議是什麼? –