2017-04-15 7 views
1

に基づいて値をカウントこれは私のコードパンダは、「V2」私はv2の<br> をカウントする

raw_data ={'id': [1, 2, 3, 4,5,1,3,4,7], 
     'value': [10, 20, 30, 40,10,20,60,6,2], 
     'v2': [100, 200, 300, 400,1,2,3,4,5]} 
df= pd.DataFrame(raw_data) 
df= df.groupby('id',as_index=False).agg(lambda x:x.tolist()) 

であるこの私の希望のデータフレームがある

id value v2  v2count firtv2 
1 [10,20] [100,2] 2  [100] 
2 [20]  [200] 1  [200] 
3 [30,60] [300,3] 2  [300] 
. 
. 
. 
+0

あなたは「*カウント値2で何を意味しています* "? 'value'が2つの値のリストである回数を意味しますか? –

+0

平均はv2の回数です。 –

+1

その他:標準の警告を出します - pandasはSeriesとDataFramesのエントリとして非スカラー要素を適切にサポートしていません。リストを置くと予期しない動作につながる可能性があります。 – DSM

答えて

0

あなたがV2で要素を数える意味場合は、そのシリーズに適用

df['v2_counts'] = [len(x) for x in list(df['v2'])] 

かと::ほど簡単

df['v2_counts'] = df['v2'].apply(lambda x: len(x)) 

と最初の要素(あなたの例のように、リストタイプ)を取得する:バリアントを適用

df['firtv2'] = [[x[0]] for x in list(df['v2'])] 

を:

df['v2'].apply(lambda x: [x[0]]) 
+0

これは私がまさに望んでいるものです –

0
d1 = df.groupby('id', as_index=False).agg(lambda x: x.tolist()) 
d1.assign(v2count=d1.v2.str.len(), firstv2=d1.v2.str[:1]) 

    id  v2  value firstv2 v2count 
0 1 [100, 2] [10, 20] [100]  2 
1 2  [200]  [20] [200]  1 
2 3 [300, 3] [30, 60] [300]  2 
3 4 [400, 4] [40, 6] [400]  2 
4 5  [1]  [10]  [1]  1 
5 7  [5]  [2]  [5]  1