Megtörni a sort muliple sorok alapján (string) tartalma egy oszlop

szavazat
0

Egy oszlop én dataframe egy változó számú \ns benne annak tartalmát, és azt kell minden sor, hogy egy sorba az utolsó dataframe.

Ez egy minimális példa:

df = pd.DataFrame({'a': ['x', 'y'], 'b':['line 1\nline 2\nline 3', 'line 1' ]})

Ez okozza ezt a kiindulási dataframe:

    a   b
0   x   line 1\nline 2\nline 3
1   y   line 1 

Azt akarom, hogy legyen, mint ez:

    a   b
0   x   line 1
1   x   line 2
2   x   line 3
3   y   line 1

Láttam van egy beépített funkció, amely átalakítja az egyes patternegy új oszlopot a str.extractlenti parancsot, például, ez az, amit én próbáltam:

df['b'].str.extract(pat='(.*)\n(.*)', expand=True)

Ez termel egy kissé érdekes kimenet:

    0       1
0   line 1  line 2
1   NaN     NaN

De ez nem járható út, mert az adatok oszlik oszlopok és sorok nem, nem az összes minta illeszkedik, és nem világos, hogy hogyan tegye vissza az eredeti helyére dataframe és a rend. Az, hogy a bejegyzés lényeges meg kell őrizni, de a dataframe indexnem.

Annak érdekében, hogy rögzítse az összes mintát, lehetséges lenne, hogy ezt:

df['b'].transform(lambda x: x.split('\n'))

Hogy megkapjuk ezt a kimenetet:

0    [line 1, line 2, line 3]
1                    [line 1]

De ismétlem, nem látok olyan módon, hogy a haladás ettől a kívánt állapot.

A kérdést 10/10/2019 00:50
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
2

Próbálja meg str.split, ésexplode

df = df.set_index('a').b.str.split('\\n').explode().reset_index()

Out[153]:
   a       b
0  x  line 1
1  x  line 2
2  x  line 3
3  y  line 1
Válaszolt 10/10/2019 00:55
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more