У меня есть 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)