python—筛选 Dataframe 的替代方法

yhived7q  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(229)

社区!这是一个很长的解释,但却是一个“简单”的问题!我有以下几点意见:

d = {'name': ['john', 'mary', 'james'], 'area':[['IT', 'Resources', 'Admin'], ['Software', 'ITS', 'Programming'], ['Teaching', 'Research', 'KS']]}
df = pd.DataFrame(data=d)


我的目标是从长度大于3的列“area”中筛选单词。因此,它看起来像:

我学会了两种方法来处理这种情况: df['area']=df['area'].map(lambda x: [e for e in x if len(e)>3]) def g(x):

return [e for e in x if len(e)>3]

 df['area']=df['area'].map(g)

在这两种情况下,它都有效。
在学习方面,我不使用lambda函数,而是迭代行,然后应用func。
这就是我得到的

所需的输出不相同。有人能告诉我需要在我的代码中做什么,这样它才能得到所需的输出吗?
我真的很感谢到目前为止我得到的所有支持!谢谢

9gm1akwq

9gm1akwq1#

问题是您返回的第一个元素长度超过3。请尝试以下操作:

def f(x):
    answer = []
    for e in x:
        if len(e)>3:
            answer.append(e)
    return answer

但更好的是,尝试一种更具Python风格的方式:

def f(x):
    return [e for e in x if len(e)>3]
mbyulnm0

mbyulnm02#

pandas 作为少数 .str 您可以使用的方法之一是 .str.len() 首先,您需要分解 Dataframe ,以便我们可以在整个df中应用操作,而不是在每个元素上迭代。

df1 = df.explode('area')

df1[df1['area'].str.len() > 3]\
            .groupby('name',as_index=False)\
            .agg(list)
name                     area
0  james     [Teaching, Research]
1   john       [Resources, Admin]
2   mary  [Software, Programming]

相关问题