通过筛选现有列来创建新变量

2024-05-23 21:22:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

数据帧:

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

不起作用


Tags: 数据dfbase单词d3新手d4e5
1条回答
网友
1楼 · 发布于 2024-05-23 21:22:00
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()])

输出列的类型是一系列列表,但您可以转换它们

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

相关问题 更多 >