我有一個帶有檢查點的 Pandas 資料框bins,這些檢查點將數軸拆分為 bin。index 是該 bin 的名稱,而 in 的值'st'是 bin 的起點,例如:
st
0: 0
1: 4
2: 6
3: 11
4: 17
因此 bin 2 是從 6 到 11 的空間
然后我有另一個資料框events,其中包含在數軸中具有位置的事件,例如:
loc
0: 1
1: 3
2: 6
3: 8
4: 10
5: 11
6: 14
7: 18
8: 20
我想找到 中的每個事件events,它屬于哪個 bin,以及與 bin 開頭的區別是什么,例如:
loc seg diff
0: 1 0 1
1: 3 0 3
2: 6 2 0
3: 8 2 2
4: 10 2 4
5: 11 3 0
6: 14 3 3
7: 18 4 1
8: 20 4 3
我能夠使用 for 回圈使其作業,由于兩個資料幀都已排序這一事實而在某種程度上進行了優化,但我想知道是否有一種沒有回圈的好方法來解決這個問題。
實際上,我的資料框bins是 100 行并且events是 10000 行,并且 和 中的值st是loc日期時間物件,所以我想找到diff時間增量。
uj5u.com熱心網友回復:
在你的情況下做pd.cut
events['seg'] = pd.cut(events['loc'],st['st'].tolist() [np.inf],labels=st.index,right=False)
events['diff'] = events['loc'] - events['seg'].map(st['st']).astype(int)
events
Out[31]:
loc seg diff
0 1 0 1
1 3 0 3
2 6 2 0
3 8 2 2
4 10 2 4
5 11 3 0
6 14 3 3
7 18 4 1
8 20 4 3
uj5u.com熱心網友回復:
由于您的st列已排序,因此您可以使用numpy.searchsorted()查找應插入元素以保持順序的索引。
import numpy as np
events['seg'] = np.searchsorted(bins['st'], events['loc'])-1
loc seg
0 1 0
1 3 0
2 6 1
3 8 2
4 10 2
5 11 2
6 14 3
7 18 4
8 20 4
然后將新創建的索引列映射到stSeries以獲得對應的值
events['diff'] = events['loc'] - events['seg'].map(bins['st'])
loc seg diff
0 1 0 1
1 3 0 3
2 6 1 2
3 8 2 2
4 10 2 4
5 11 2 5
6 14 3 3
7 18 4 1
8 20 4 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/456068.html
下一篇:用字典修改資料框列
