Разбить (взорвать) строку ввода в панде в кадре данных на отдельные строки
у меня естьpandas dataframe
в котором один столбец текстовых строк содержит значения, разделенные запятыми. Я хочу разделить каждое поле CSV и создать новую строку для каждой записи (предположим, что CSV чистые и их нужно разделять только на ','). Например,a
должен стать:b
In [7]: a
Out[7]:
var1 var2
0 a,b,c 1
1 d,e,f 2
In [8]: b
Out[8]:
var1 var2
0 a 1
1 b 1
2 c 1
3 d 2
4 e 2
5 f 2
До сих пор я пробовал различные простые функции, но.apply
Кажется, что метод принимает только одну строку в качестве возвращаемого значения, когда он используется на оси, и я могу 'т получить.transform
работать. Любые предложения будут высоко ценится!
Пример данных:
from pandas import DataFrame
import numpy as np
a = DataFrame([{'var1': 'a,b,c', 'var2': 1},
{'var1': 'd,e,f', 'var2': 2}])
b = DataFrame([{'var1': 'a', 'var2': 1},
{'var1': 'b', 'var2': 1},
{'var1': 'c', 'var2': 1},
{'var1': 'd', 'var2': 2},
{'var1': 'e', 'var2': 2},
{'var1': 'f', 'var2': 2}])
Я знаю это победилоЭто работает, потому что мы теряем метаданные DataFrame, проходя через numpy, но это должно дать вам представление о том, что я пытался сделать:
def fun(row):
letters = row['var1']
letters = letters.split(',')
out = np.array([row] * len(letters))
out['var1'] = letters
a['idx'] = range(a.shape[0])
z = a.groupby('idx')
z.transform(fun)