ecl*_*irs 11 python text concatenation dataframe pandas
我有一个包含多行的DataFrame.有没有什么方法可以将它们组合成一个字符串?
例如:
words
0 I, will, hereby
1 am, gonna
2 going, far
3 to
4 do
5 this
Run Code Online (Sandbox Code Playgroud)
预期产量:
I, will, hereby, am, gonna, going, far, to, do, this
Run Code Online (Sandbox Code Playgroud)
Ale*_*ley 18
您可以使用它str.cat
来连接每行中的字符串.对于系列或列s
,请写:
>>> s.str.cat(sep=', ')
'I, will, hereby, am, gonna, going, far, to, do, this'
Run Code Online (Sandbox Code Playgroud)
Zer*_*ero 10
传统的蟒蛇怎么样join
?而且,它更快.
In [209]: ', '.join(df.words)
Out[209]: 'I, will, hereby, am, gonna, going, far, to, do, this'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
小智 7
如果您使用a DataFrame
而不是a,Series
并且希望将基于另一列的不同行中的值(我认为仅文本值)作为“ group by”键进行连接,则可以使用.agg
类中的方法DataFrameGroupBy
。这是API手册的链接。
使用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()
})
Run Code Online (Sandbox Code Playgroud)