【问题标题】:How to create a new dataFrame based on some column values?如何根据某些列值创建新的数据框?
【发布时间】:2021-04-16 14:42:00
【问题描述】:

我有一个数据框,其中有一列标志,其值为真或假。我想创建一个新的数据框,其列标志的值必须全部为真。

df = {'Name':['Tom', 'nick', 'krish', 'jack'],
      'Age':['12', '23', '25', '16'],
      'Flag':[True, False, False, True]}

我想要一个新的 df,它的标志为真,并删除这个标志列:

df = {'Name':['Tom', 'jack'],
       'Age':['12', '16']}

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    boolean indexingboolean 列一起使用,因此无需通过True 进行比较:

    df = pd.DataFrame(df)    
    

    您只能通过列表使用DataFrame.loc来选择某些列:

    df1 = df.loc[df['Flag'], ['Name','Age']]
    

    或者使用和删除Flag使用DataFrame.pop

    df1 = df[df.pop('Flag')]
    

    或者选择添加DataFrame.drop后删除Flag:

    df1 = df[df['Flag']].drop('Flag', axis=1)
    

    print (df1)
       Name Age
    0   Tom  12
    3  jack  16
    

    【讨论】:

      【解决方案2】:

      使用布尔掩码和drop() 方法:

      resultdf=df[df['Flag']==True].drop(columns=['Flag'])
      

      你也可以使用where()方法

      resultdf=df.where(df['Flag']==True).dropna().drop(columns='Flag')
      

      输出:

      print(resultdf)
      
          Name    Age
      0   Tom     12
      3   jack    16
      

      如果您希望索引从 0 开始,则只需链式 reset_index() 方法:

      resultdf=df[df['Flag']==True].drop(columns=['Flag']).reset_index(drop=True)
      

      resultdf=df.where(df['Flag']==True).dropna().drop(columns='Flag').reset_index(drop=True)
      

      输出:

      print(resultdf)
      
          Name    Age
      0   Tom     12
      1   jack    16
      

      【讨论】:

        【解决方案3】:

        首先使它成为一个数据框:

        df = pd.DataFrame({'Name':['Tom', 'nick', 'krish', 'jack'],
          'Age':['12', '23', '25', '16'],
          'Flag':[True, False, False, True]})
        

        然后你可以这样做:

        df.loc[[0,3] ,["Name","Age"]]
        

        结果如下:

            Name    Age
        0   Tom     12
        3   jack    16
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-19
          • 1970-01-01
          • 2016-07-30
          • 2020-04-12
          • 2021-10-03
          • 1970-01-01
          • 2022-09-23
          • 1970-01-01
          相关资源
          最近更新 更多