通过过滤现有列来创建新变量

时间:2019-09-06 04:22:04

标签: python python-3.x dataframe

我有一个DataFrame。我想根据每个单词的长度创建一个新变量。 例如:

DataFrame:

            base
0        d4 d5 c4 
1        d4 Nc6 e4 
2        e4 e5 d3 
3        d4 d5 Nf3 

所需的数据框:

            base       len2          len3
0        d4 d5 c4      d4 d5 c4 
1        d4 Nc6 e4     d4 e4         Nc6
2        e4 e5 d3      e4 e5 d3
3        d4 d5 Nf3     d4 d5         Nf3

我是python的新手,这是我尝试过的

df['len2'] = filter(len(df['base'].str.split()) == 2, df['base'])

不起作用。

1 个答案:

答案 0 :(得分:0)

df = pd.DataFrame({'base': ['d4 d5 c4', 'd4 Nc6 e4']})
df['len2'] = df['base'].str.split().apply(lambda x: [i for i in x if not i[0].isupper()])
df['len3'] = df['base'].str.split().apply(lambda x: [i for i in x if i[0].isupper()])

输出列的类型为pd。一系列列表,但您可以将其转换

df['len3'] = df['base'].str.split().apply(lambda x: " ".join([i for i in x if i[0].isupper()]))

如果您的条件是每个元素的长度等于2,那么

df['len3'] = df['base'].str.split().apply(lambda x: " ".join([i for i in x if len(i) != 2]))

        base len3
0   d4 d5 c4     
1  d4 Nc6 e4  Nc6