如何使用pandas将多行字符串组合成一行?

时间:2015-10-22 11:28:55

标签: python pandas text dataframe concatenation

我有一个包含多行的DataFrame。有没有什么方法可以将它们组合成一个字符串?

例如:

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

预期产出:

I, will, hereby, am, gonna, going, far, to, do, this

4 个答案:

答案 0 :(得分:16)

您可以使用str.cat加入每行中的字符串。对于系列或列s,请写:

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

答案 1 :(得分:9)

传统的蟒蛇join怎么样?而且,它更快。

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

2016年12月关于熊猫的定时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

答案 2 :(得分:6)

如果您有一个DataFrame而不是Series,并且您希望根据另一列将不同行的值(我认为仅限文本值)连接为“group by”键,那么您可以使用类.agg中的DataFrameGroupBy方法。这是link to the API manual

使用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()
})

答案 3 :(得分:0)

对于任何想知道如何在dataframe中组合多行字符串的人,
我提供了一种可以在接近行的“窗口状”范围内连接字符串的方法,如下所示:

# add columns based on 'windows-like' rows
df['windows_key_list'] = pd.Series(df['key'].str.cat([df.groupby(['bycol']).shift(-i)['key'] for i in range(1, windows_size)], sep = ' ')

注意: groupby无法达到此目的,因为我们并不意味着相同的行ID,只是行附近。