Utilisation list comprehension
avec groupby
:
from itertools import groupby
df = pd.DataFrame({'a':[['Andhra Pradesh-133', 'Meetai-1358', 'Meetai-2146', 'Meetai-2277'],
['Andhra Pradesh-20', 'Rajasthan-60', 'Rajasthan-70']]})
data = []
for x in df['a']:
b = [a.split('-') for a in x]
L = [t for k, g in groupby(b, key=lambda x: x[0])
for t in [k + '-' + str(sum((int(j) for i, j in g)))]]
data.append(L)
print (data)
[['Andhra Pradesh-133', 'Meetai-5781'], ['Andhra Pradesh-20', 'Rajasthan-130']]
df['b'] = data
print (df)
a \
0 [Andhra Pradesh-133, Meetai-1358, Meetai-2146,...
1 [Andhra Pradesh-20, Rajasthan-60, Rajasthan-70]
b
0 [Andhra Pradesh-133, Meetai-5781]
1 [Andhra Pradesh-20, Rajasthan-130]
EDIT:
Solution si l'entrée est un fichier:
data = []
for line in open('file.csv'):
#strip new-line characters, split by [ and get second list
items = line.strip('\r\n" ]').split('[')[1]
#split lines, remove whitespace
items = [item.strip("' ") for item in items.split(',')]
#split to sublist
items = [a.split('-') for a in items]
#sum splitted sublists
items = [t for k, g in groupby(items, key=lambda x: x[0])
for t in [k + '-' + str(sum((int(j) for i, j in g)))]]
data.append(items)
print (data)
[['Andhra Pradesh-133', 'Meetai-5781'], ['Andhra Pradesh-20', 'Rajasthan-130']]
EDIT :
Vous avez besoin divisé par la première apparition de [
puis bande []
aussi:
data = []
for line in open('file.csv'):
#strip new-line characters, split by [ and get second list
items = line.strip('\r\n" ]').split('[', 1)[1]
#split lines, remove whitespace
items = [item.strip("'[] ") for item in items.split(',')]
#split to sublist
items = [a.split('-') for a in items]
print (items)
#sum splitted sublists
items = [t for k, g in groupby(items, key=lambda x: x[0])
for t in [k + '-' + str(sum((int(j) for i, j in g)))]]
data.append(items)
ont un petit doute ici si je considère x = [[ 'panjim-20', 'Uttar Pradesh-23185', ' Gujurat-1013 ',' Uttar Pradesh-51 '] le groupe de fonctions de déclaration par ne semble pas fonctionner. b = [a.split ('-') pour un dans x] pour k, g dans groupby (b, clé = lambda x: x [0]): ne se groupe pas par 'uttar Pradesh' aussi la chaîne est exactement le même. pourriez-vous aider à ce que doit être le miss? –
Je pense qu'il y a un problème double '[['. Je modifie la réponse. – jezrael
des excuses pour la faute de frappe x = ['panjim-20', 'Uttar Pradesh-23185', 'Gujurat-1013', 'Uttar Pradesh-51'] est la liste que j'essaie de traiter. ? –