2017-07-03 30 views
2

我想獲得熊貓數據框中列中n個單詞的前n/2個。 每行可以有不同數量的單詞,但每一行都有偶數個單詞。 此列包含項目的名稱,但每個名稱都重複。例如,One變爲One OneOne Two變成One Two One Two獲取熊貓數據框中列中n個單詞的前n/2個

我認爲以下工作。

  1. 算話
  2. 數量劈在空間列
  3. 得到這個分裂的前n/2個字

但它不工作(我只是隨便使用Python和熊貓)。 這是一個MWE。

import pandas as pd 
df = pd.DataFrame(['One One', 'One Two One Two']) 
df[1] = df[0].str.count('\w+') 
df[2] = df[0].str.split() 
df[3] = df[0].get(df[2]) 

P.S.如果您對R用戶的熊貓有很好的參考,請讓我知道。你

回答

3
df = pd.DataFrame(['One One', 'One Two One Two']) 

def proc(s): 
    l = s.split() 
    return ' '.join(l[:len(l) // 2]) 

df[1] = [proc(s) for s in df[0].values.tolist()] 

       0  1 
0   One One  One 
1 One Two One Two One Two 
3

基地以前的努力:

df = pd.DataFrame(['One One', 'One Two One Two']) 
df[1] = df[0].str.count('\w+') 
df[2] = df[0].str.split() 
df[3]=df.apply(lambda x: ' '.join(x[2][:int((x[1]/2))]), axis=1) 

df 
Out[354]: 
       0 1      2  3 
0   One One 2   [One, One]  One 
1 One Two One Two 4 [One, Two, One, Two] One Two 

我的解決方案(此基礎上你所提到的每行可以有不同數量的話,但每排有偶數個字的這種情況。列包含項目的名稱,但每個名稱都重複。)):

df['Target']= df.apply(lambda x: x[0][:int((len(x[0])+1)/2)], axis=1) 


df 
Out[389]: 
       0 Target 
0   One One  One 
1 One Two One Two One Two 
相關問題