【问题标题】:Subset pandas dataframe using function applied to a column/series使用应用于列/系列的函数子集熊猫数据框
【发布时间】:2021-07-01 21:26:45
【问题描述】:

我有一个 pandas 数据框 df,我想根据通过某个函数 is_valid() 运行 Name 的结果对其进行子集化

import pandas as pd

data = [['foo', 10], ['baar', 15], ['baz', 14]]
df = pd.DataFrame(data, columns = ['name', 'age'])
df

    name    age
0   foo     10
1   baar    15
2   baz     14

该函数检查输入字符串的长度是否为 3,并返回 True 或 False:

def is_valid(x):
    assert isinstance(x, str)
    return True if len(x) == 3 else False

我的目标是子集 df 这个函数返回 True,这将返回一个输出

    name    age
0   foo     10
2   baz     14

以下语法返回错误;如果输出满足条件(在这种情况下 = True),将函数应用于列(系列)的值并设置数据帧的子集的正确语法是什么?

df[is_valid(df['name'])]

【问题讨论】:

    标签: python pandas dataframe lambda subset


    【解决方案1】:

    试试:

    df[df['name'].str.len()==3]
    

    或将您的代码与apply 一起使用:

    df[df['name'].apply(is_valid)]
    

    【讨论】:

      【解决方案2】:

      使用Series.str.len 和Series.eq 作为掩码:

      df = df[df['name'].str.len().eq(3)]
      

      或者使用Series.apply传递自定义函数:

      df = df[df['name'].apply(is_valid)]
      print (df)
        name  age
      0  foo   10
      2  baz   14
      

      【讨论】:

        猜你喜欢
        • 2019-02-07
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        相关资源
        最近更新 更多