我有一個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
我有一個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
您可以使用str.cat
加入每一行中的字符串。對於一個系列或列s
,寫:
>>> s.str.cat(sep=', ')
'I, will, hereby, am, gonna, going, far, to, do, this'
如果你有一個數據幀,但不是一個系列,並且希望貓值(我認爲文本值只)的基礎上的另一列從不同行的「按'鍵分組。您可以使用類DataFrameGroupBy中的.agg方法。這裏是一個link to the API manual 這裏是大熊貓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()
})
次要評論:需要分配給一個新的數據幀egdf2 = df.groupby(...) –
如何傳統的Python的join
測試示例代碼?而且,速度更快。
In [209]: ', '.join(df.words)
Out[209]: 'I, will, hereby, am, gonna, going, far, to, do, this'
計時12月年,2016年對大熊貓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
有趣的時機,我得到了0.19.2類似的結果。然而,我認爲這裏的權衡是'str.cat'將無縫地處理像'NaN'和'None'這樣的缺失值(甚至可以提供'na_rep'參數來選擇如何表示這些缺失值)。 Python的'join'在這裏失敗。你可以通過過濾/填入缺失值和*然後*加入來解決這個問題,但是這會讓它慢下來。如果列中存有分類值,那麼填充這樣的缺失值也會失敗; 'str.cat'正常工作。 –
什麼是元素的類型?我猜'0','1'等是索引權? –
索引就像0,1,2,3,4,5,6,7,.... – eclairs