鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python  網(wǎng)絡(luò)安全/ Pandas多次分組統(tǒng)計

Pandas多次分組統(tǒng)計

各位大佬,請教一個Pandas分組問題,個人感覺比較復(fù)雜。

df = pd.DataFrame({"Date":pd.date_range(start='2018-08-17 08:10:30',periods=15,freq='s',normalize=True),"Category":list('AAAAAAAAAAAABBB'),"ActionType":[1,3,2,1,4,5,3,1,3,4,5,2,1,3,2]})

首先按Category分類,類別里按Date時間排序,排序后按ActionType繼續(xù)分組統(tǒng)計,ActionType的統(tǒng)計規(guī)則是,1為每個分組的開始,2為結(jié)束,但2不一定出現(xiàn),示例數(shù)據(jù)的結(jié)果應(yīng)該是Category分為兩組A,B,其中A里又有3組,B里有一組

請教應(yīng)該怎么實現(xiàn)或者有什么思路?

回答
編輯回答
遲月

python3

np.vsplit( df,np.where(df.ActionType==1)[0][1:])
2018年3月17日 13:34
編輯回答
不將就
df = pd.DataFrame({"Date":pd.date_range(start='2018-08-17 08:10:30',periods=15,freq='s',normalize=True),"Category":list('AAAAAAAAAAAABBB'),"ActionType":[1,3,2,1,4,5,3,1,3,4,5,2,1,3,2]})
split = []
for idx,(ctg,act) in enumerate(zip(df.Category,df.ActionType)):
    if act == 1:
        split.append(idx)
        print(idx,ctg,act)
split.append(len(df.Category))
for i in range(len(split)-1):
    print(df.Date[split[i]:split[i+1]])

結(jié)果:
0 A 1
3 A 1
7 A 1
12 B 1
0 2018-08-17 00:00:00
1 2018-08-17 00:00:01
2 2018-08-17 00:00:02
Name: Date, dtype: datetime64[ns]
3 2018-08-17 00:00:03
4 2018-08-17 00:00:04
5 2018-08-17 00:00:05
6 2018-08-17 00:00:06
Name: Date, dtype: datetime64[ns]
7 2018-08-17 00:00:07
8 2018-08-17 00:00:08
9 2018-08-17 00:00:09
10 2018-08-17 00:00:10
11 2018-08-17 00:00:11
Name: Date, dtype: datetime64[ns]
12 2018-08-17 00:00:12
13 2018-08-17 00:00:13
14 2018-08-17 00:00:14
Name: Date, dtype: datetime64[ns]

2017年7月6日 23:34