2014-12-31 9 views
5

Come ridurre un dato con la stringa più lunga sotto il framework pandas? Ho provato il seguente codice, ma ottengo ValueError: invalid number of arguments.Come ridurre un dato con la stringa più lunga sotto il framework pandas?

def f1(s): 
    return max(s, key=len) 

data.groupby('id').agg({'name':(lambda s: f1(s)) }) 

Es. Ingresso

id name 
GB "United Kingdom" 
GB England 
US "United States" 
US America 

uscita:

id name 
GB "United Kingdom" 
US "United States" 

risposta

5

Il codice dovrebbe funzionare. A proposito, non è necessario avvolgere f1 all'interno di un altro lambda. Basta passare f1. (Hanno esattamente la stessa firma di parametro)

>>> import pandas as pd 
>>> 
>>> def f1(s): 
...  return max(s, key=len) 
... 
>>> data = pd.DataFrame([ 
...  {'id': 'GB', 'name': '"United Kingdom"'}, 
...  {'id': 'GB', 'name': 'England'}, 
...  {'id': 'US', 'name': '"United States"'}, 
...  {'id': 'US', 'name': 'America'}, 
... 
... ]) 
>>> data.groupby('id').agg({'name': f1}) 
       name 
id 
GB "United Kingdom" 
US "United States" 
Problemi correlati