Ho un dataframe panda
in cui una colonna di stringhe di testo contiene valori separati da virgole. Voglio dividere ogni campo CSV e creare una nuova riga per voce (supponiamo che CSV sia pulito e debba essere diviso solo su ","). Ad esempio, a
dovrebbe diventare 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
Finora ho provato varie semplici funzioni, ma il metodo .apply
sembra accettare solo una riga come valore restituito quando viene utilizzata su un asse e non riesco a ottenere . trasforma
per funzionare. Qualsiasi suggerimento sarebbe molto apprezzato!
Dati di esempio:
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}])
So che questo non funzionerà perché perdiamo i metadati di DataFrame passando per numpy, ma dovrebbe darti un'idea di quello che ho provato a fare:
def fun(row) : lettere = riga["var1"] lettere = le tters.split(",") out = np.array([row] * len(lettere)) out["var1"] = lettere a["idx"] = range(a.shape[0]) z = a .groupby("idx") z.transform(divertimento)