我想在pandas数据框的列中获得n个单词的前n / 2个。
每行可以具有不同数量的单词,但每行具有偶数个单词。
此列包含项目的名称,但每个名称都是重复的。
例如,One
变为One One
,One Two
变为One Two One Two
。
我认为以下内容可行。
但它不起作用(我只是偶然使用Python和pandas)。 这是一个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用户有很好的pandas参考,请告诉我。
答案 0 :(得分: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
答案 1 :(得分: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
我的解决方案(基于您提到的内容每行可以有不同数量的单词,但每行都有一个偶数个单词。此列包含项目的名称,但每个名称都是重复的。< / em>):
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
答案 2 :(得分:0)
df[column_name].apply(lambda x: ' '.join(x.split()[:2]))
这将从数据框中列出的列名中获取前n个(在上述情况下为2个)。