首页 > 解决方案 > 通过从现有列中过滤来创建新变量

问题描述

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

数据框:

            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'])

不起作用。

标签: pythonpython-3.xdataframe

解决方案


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.Series 列表,但您可以转换它们

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

推荐阅读