2017-04-15 188 views
1

我想算V2
計值。這是我的代碼大熊貓基於「V2」

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 * 「?你的意思是「價值」是兩個值的列表的次數? –

+0

我的意思是v2的次數 –

+1

另外:我會給出標準警告 - 熊貓對於非標量元素沒有很好的支持作爲Series和DataFrame的條目。把名單放在那裏很可能會導致意外的行爲。 – 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