Как разбить несколько строк в несколько отдельных строк - PullRequest
1 голос
/ 31 мая 2019

У меня есть CSV-файл, который имеет несколько «значений» в сложной форме для одного «id» и я хочу, чтобы несколько значений были разбиты на разные строки по отношению к его "id".

Мой CSV-файл:

# To read df1=pandas.read_csv('krish.csv',encoding="ISO-8859-1")
# File have data even like 1.50% (P,KR,AU) 0.2¢/kg (AX,AU)
id  value
100.3   Free (A+,BH,CA) 0.1¢/kg (AX)
200.1   Free (MA, MX,OM)
321.5   Free (BH,CA) 1.70% (P) 7% (PE) 12.3% (KR)

РЕЗУЛЬТАТ, КОТОРЫЙ Я ХОЧУ ДЛЯ МОЕГО ВХОДА, ВЫШЕ ВЫШЕ:

Required output

ВЫХОД, КОТОРЫЙ ПОЛУЧИЛСЯ В МОЕМ КОДЕКЕ И ДЛЯ ЧТО Я ПОПЫТАЛ Required output

1 Ответ

1 голос
/ 31 мая 2019

Я почти уверен, что есть более эффективные / элегантные способы, но это должно сработать

def split_elements(s):
    elements = s[s.find('(')+1:-1].split(',')
    key = s[:s.find('(')]
    return ['{} ({})'.format(key, el) for el in elements]

input_data = {'values': ['Free (A+,BH,CA) 0.1¢/kg (AX)', 'Free (MA, MX,OM)', 'Free (BH,CA) 1.70% (P) 7% (PE) 12.3% (KR)'], 'ids': [100.3, 200.1, 321.5]}
df = pd.DataFrame(input_data)

temp_values = []
temp_ids = []
# iterate through rows
for idr, r in df.iterrows():
    # extract elements
    elements = [el.strip()+')' for el in r['values'].split(')') if el != '']
    # split subelements
    for element in elements:
        split_el = split_elements(element)
        temp_values.extend(split_el)
        temp_ids.extend([r['ids']]*len(split_el))
# create dataset
df1 = pd.DataFrame({'ids': temp_ids, 'values': temp_values})
df1.set_index('ids')

Что дает

ids     values
100.3   Free (A+)
100.3   Free (BH)
100.3   Free (CA)
100.3   0.1¢/kg (AX)
200.1   Free (MA)
200.1   Free ( MX)
200.1   Free (OM)
321.5   Free (BH)
321.5   Free (CA)
321.5   1.70% (P)
321.5   7% (PE)
321.5   12.3% (KR)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...