How to combine multiple lines of lines into one using pandas?

I have a DataFrame with multiple rows. Is there a way that they can be combined to form a single line?

For example:

     words
0    I, will, hereby
1    am, gonna
2    going, far
3    to
4    do
5    this

Expected Result:

I, will, hereby, am, gonna, going, far, to, do, this
+8
source share
3 answers

You can use str.catto combine the lines in each line. For a series or column, swrite:

>>> s.str.cat(sep=', ')
'I, will, hereby, am, gonna, going, far, to, do, this'
+14
source

What about traditional python join? And it's faster.

In [209]: ', '.join(df.words)
Out[209]: 'I, will, hereby, am, gonna, going, far, to, do, this'

Dates in December 2016 by pandas 0.18.1

In [214]: df.shape
Out[214]: (6, 1)

In [215]: %timeit df.words.str.cat(sep=', ')
10000 loops, best of 3: 72.2 µs per loop

In [216]: %timeit ', '.join(df.words)
100000 loops, best of 3: 14 µs per loop

In [217]: df = pd.concat([df]*10000, ignore_index=True)

In [218]: df.shape
Out[218]: (60000, 1)

In [219]: %timeit df.words.str.cat(sep=', ')
100 loops, best of 3: 5.2 ms per loop

In [220]: %timeit ', '.join(df.words)
100 loops, best of 3: 1.91 ms per loop
+8
source

If you have DataFrameand not Serieswant to combine values ​​(I think, only text values) from different rows based on another column as the 'group by' key, then you can use the method .aggfrom the class DataFrameGroupBy. Here is a link to the API manual .

Sample code tested with Pandas v0.18.1:

import pandas as pd

df = pd.DataFrame({
    'category': ['A'] * 3 + ['B'] * 2,
    'name': ['A1', 'A2', 'A3', 'B1', 'B2'],
    'num': range(1, 6)
})

df.groupby('category').agg({
    'name': lambda x: ','.join(x),
    'num': lambda x: x.max()
})
+4
source

Source: https://habr.com/ru/post/1612746/


All Articles