2016-05-05 25 views
0

Ich habe DatenZählwerte in Spalte Pandas

member_id device_id      
19404  dfbc9d3230304cdfb0316cc32c41b67f [2016-04-28, 2016-04-27, 2016-04-26, 2016-04-22] 
19555  176e307bd8714a00ac2b99276123f0a7 [2016-04-29, 2016-04-28, 2016-04-27, 2016-04-23] 
19632  a6d4b631e09a4b31afef4c93472c7da3     [2016-04-29, 2016-04-28, 2016-04-27] 
19792  0146b09048ce4c47af4bbc69e7999137 [2016-04-23, 2016-04-22, 2016-04-21, 2016-04-20] 
20258  1510f9b4efc14183ad412eb54c9e058f           [2016-04-09] 
      5f42f4d02d38456689e58d6a1b9a3e16 [2016-04-29, 2016-04-28, 2016-04-25, 2016-04-22] 

und ich brauche Werte in der dritten Spalte in der Liste zu zählen. Ich versuche len(), ich dachte, es gibt Länge der Liste zurück, aber es ist falsch. new = data.groupby(['member_id', 'device_id'])['event_date'].unique() count() gibt Summe aller Werte

Antwort

2

unter der Annahme, dass Sie eine list von Werten in Ihrer letzten Spalte l haben:

In [113]: df.l.map(len) 
Out[113]: 
0 4 
1 4 
2 3 
3 4 
4 1 
5 4 
Name: l, dtype: int64 

wenn Ihre letzte Spalte String ist, können Sie es zuerst konvertieren aufzulisten:

df.l.str.replace('[\[\]]', '').str.split('\s*,\s*').map(len) 
1

Sie können die Funktion len auf die gruppierte Spalte anwenden. Die .iat[0] erhält das erste Element in der Gruppe, in diesem Fall ist das Ihre Liste.

>>> df.groupby(['member_id', 'device_id'])['event_date'].agg(
     {'event_count': lambda group: len(group.iat[0])}) 
              event_count 
member_id device_id          
19404  dfbc9d3230304cdfb0316cc32c41b67f   4 
19555  176e307bd8714a00ac2b99276123f0a7   4 
19632  a6d4b631e09a4b31afef4c93472c7da3   3 
19792  0146b09048ce4c47af4bbc69e7999137   4 
20258  1510f9b4efc14183ad412eb54c9e058f   1 
      5f42f4d02d38456689e58d6a1b9a3e16   4 
+0

Es ist seltsam, aber es gibt uncorrect Ergebnis, dass meine Daten –

1

Ist das, was Sie suchen:

import pandas as pd 

df = pd.DataFrame(columns=('member_id','device_id','event_date'),data=[ 
[19404,'dfbc9d3230304cdfb0316cc32c41b67f',['2016-04-28', '2016-04-27', '2016-04-26', '2016-04-22']], 
[19555,'176e307bd8714a00ac2b99276123f0a7',['2016-04-29', '2016-04-28', '2016-04-27', '2016-04-23']], 
[19632,'a6d4b631e09a4b31afef4c93472c7da3',['2016-04-29', '2016-04-28', '2016-04-27']], 
[19792,'0146b09048ce4c47af4bbc69e7999137',['2016-04-23', '2016-04-22', '2016-04-21', '2016-04-20']], 
[20258,'1510f9b4efc14183ad412eb54c9e058f',['2016-04-09']], 
[20258,'5f42f4d02d38456689e58d6a1b9a3e16',['2016-04-29', '2016-04-28', '2016-04-25', '2016-04-22']] 
]) 

new = df.groupby(['member_id', 'device_id'])['event_date'] 

for each_n in new: 
    print each_n[0],len(each_n[1].values[0]) 

Ausgabe

(19404, 'dfbc9d3230304cdfb0316cc32c41b67f') 4 
(19555, '176e307bd8714a00ac2b99276123f0a7') 4 
(19632, 'a6d4b631e09a4b31afef4c93472c7da3') 3 
(19792, '0146b09048ce4c47af4bbc69e7999137') 4 
(20258, '1510f9b4efc14183ad412eb54c9e058f') 1 
(20258, '5f42f4d02d38456689e58d6a1b9a3e16') 4