python - 通过从现有列中过滤来创建新变量

标签 python python-3.x 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'])

不起作用。

最佳答案

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

关于python - 通过从现有列中过滤来创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57815687/

相关文章:

python - 如何将内容处置 header 设置为文件部分的附件?

python - 如何在 PyPy 上使用 Biopython?

python - Mypy 错误 "Need more than 2 values to unpack (3 expected)"尽管使用了不同元组的并集

python - 如何从 pylint 获取错误列表?

python - 当我尝试从列表中删除元素时,如何忽略 ValueError?

python - 使用 Python 3(而非 Python 2)下载时 Zip 文件损坏

python-3.x - 在脚本本身内部获取shell/python脚本的PID

python - 两次使用 apply() 创建新列会导致覆盖新列

python - 数据帧行的快速笛卡尔求和

python - 如何按照某些标准将数据集拆分为子集?