2017-06-19 1 views
2

データフレームを2つの列にグループ化してから、3番目の列の値の出現を1そして20Python/Pandas - 2つの列をグループ化し、3つの列の値を2つの数値の間に入れる方法

データフレーム:

col1 col2 value 
    a  b  1 
    a  b  3 
    a  b  22 
    a  c  0 
    a  c  3 
    a  c  19 

結果:

col1 col2 counter 
a  b  2 
a  c  2 

マイコード:

counter = data_frame.groupby(['column1', 'column2'])[((data_frame['value'] >= 1) & (data_frame['value'] < 20))].sum() 

アイデア?

答えて

1

あなたはsizeを集約してboolean indexingまたはquery、その後groupbyによって第一のフィルタが必要です。

df = data_frame[(data_frame['value'] >= 1) & (data_frame['value'] < 20)] 
df = df.groupby(['col1', 'col2']).size().reset_index(name='counter') 
print (df) 
    col1 col2 counter 
0 a b  2 
1 a c  2 

または:

df = data_frame.query('value >= 1 & value < 20') 
df = df.groupby(['col1', 'col2']).size().reset_index(name='counter') 
print (df) 
    col1 col2 counter 
0 a b  2 
1 a c  2 

What is the difference between size and count in pandas?

+0

、どうもありがとう! – bartblons

0

あなたが最初にこれらの値をフィルタ処理する必要があり、その後、あなたはgroupbycountを使用できますこのようなの機能:

df[(df.value<=20) & (df.value >= 1)].groupby(['col1','col2']).count().reset_index() 

出力:

col1 col2 value 
0 a  b  2 
1 a  c  2 


100 loops, best of 3: 2.5 ms per loop 
素晴らしい作品
関連する問題