Pandas基礎 使用者遊覽日誌時間合併排序

2021-10-14 07:52:17 字數 2334 閱讀 6729

有乙份下面格式使用者遊覽日誌的資料(複製下面顯示的**後,執行下面的**才會出現相同的結果):

import pandas as pd

df = pd.read_clipboard(

)df

結果:

uidstart

end0a1

21a4

72a3

63a8

94b2

35b4

76b10

117b6

88b12

159c14

15其中uid表示每個使用者,start表示起始遊覽時間,end表示結束遊覽的時間,從上表可以看到,存在遊覽時間重疊的情況,例如使用者a的遊覽時間3-6和4-7重疊,可以認為遊覽時間是3-7。

我們現在要做的事就是把每個使用者的存在重疊的遊覽時間合併到一起,最終並按照時間順序排序顯示。

注意:3-4和4-6也屬於重疊的時間,可以合併為3-6。

取出乙個使用者的資料,用於測試操作:

tmp = df.groupby(

"uid"

).get_group(

'b')

tmp

結果:

uidstart

end4b2

35b4

76b10

117b6

88b12

15觀察發現,要解決這個問題,我們首先需要對資料按照開始時間排序。

排序後:

tmp = tmp.sort_values(

'start'

)tmp

結果:

uidstart

end4b2

35b4

77b6

86b10

118b12

15觀察排序後的資料,我們就能很快的觀察出合併的規則:

result =

for uid, start, end in tmp.values:

# 如果結果集中還沒有資料或者當前記錄的起始時間大於上一條記錄的結束時間

# 就可以直接將當前記錄加入到結果集

ifnot result or start > result[-1

][2]

:[uid, start, end]

)else

:# 否則,說明可以將當前記錄與上一條記錄合併

# 合併方法是如果當前記錄的結束時間大於上一條記錄的結束時間,

# 則上一條記錄的結束時間修改為當前記錄的結束時間

result[-1

][2]

=max

(result[-1

][2]

, end)

tmp = pd.dataframe(result, columns=

["uid"

,"start"

,"end"])

tmp

結果:

uidstart

end0b2

31b4

82b10

113b12

15

result =

for uid, tmp in df.groupby(

"uid"):

tmp = tmp[

["start"

,"end"]]

.sort_values(

'start'

) rows =

for start, end in tmp.values:

ifnot rows or start > rows[-1

][2]

:[uid, start, end]

)else

: rows[-1

][2]

=max

(rows[-1

][2]

, end)

tmp = pd.dataframe(rows, columns=

["uid"

,"start"

,"end"])

result = pd.concat(result)

result

結果:

uidstart

end0a1

21a3

72a8

90b2

31b4

82b10

113b12

150c14

15好了,完結,撒花!

pandas列相加 Pandas 基礎

git 上pandas學習教程,共有十章 4個板塊 pandas基礎 四類操作 四類資料 例子。原文內容系統的講解了pandas庫的使用方法,編排邏輯易懂,覆蓋面廣且含有相應練習,之前已經學習過pandas,但是感覺應用時有些費力,計畫重新按照學習教程再梳理一遍,爭取10天完成學習,enjoy ti...

pandas基礎運算

python for data analysis pandas可以對不同索引的物件進行算術運算。例如 當物件相加時,如果存在不同的索引對,其結果的索引就是該索引對的並集。自動的資料對齊操作在不重疊的索引處引入了na值。並且會在算術運算中傳播。in 1 import numpy as np in 2 ...

Pandas基礎學習

encoding utf 8 import pandas as pd import numpy as np s pd.series 1,3,5,np.nan,6,8 print s dates pd.date range 20130101 periods 6 print dates 生成隨機數,ra...