2017-04-15 192 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