pandas的groupby.apply函数的应用
Eg: df为DataFrame类型
device_id key1 key2 key3
1 a i 0 1
2 b j 1 1
3 a j 0 0
4 c k 1 1
5 c i 0 0
6 a i 0 1
case1:根据表df2的列表头'device_id',将相同device_id的后面各列对应的元素合并到一个列表中
df1=df.groupby('device_id',as_index=0).agg(lambda arr:([x for x in arr]))
print df1
device_id key1 key2 key3
1 a [i,j,i] [0,0,0] [1,0,1]
2 b [j] [1] [1]
3 c [i,k] [0,0] [0,0]
case2: 表df中,根据device_id,对其后面对应元素合并,并去重
df2=df.groupby('device_id',as_index=0).agg(lambda arr:list(set([x for x in arr])))
print df2
device_id key1 key2 key3
1 a [i,j] [0] [1,0]
2 b [j] [1] [1]
3 c [i,k] [0] [0]
case3: 假如df3如下图所示
id sex
0 a [1, 1, 0, 1]
1 b [0, 1, 0]
2 c [1, 1, 0, 0, 0]
3 d [0, 1, 0, 0]
若要将sex对应的元素为0或1,取每个元素中元素最多的数。eg:a对应的sex有3个1,大于0的个数故取1.而c中1的个数为2个,少于0的个数3个,取0.党元素个数相等,取0
from collections import Counter
df3["sex"]=df3["sex"].apply(lambda arr:Counter(arr).most_common(1)[0][0])
print df3
id sex
0 a 1
1 b 0
2 c 0
3 d 0
网友评论