【问题标题】:create a new data frame from existing data frame based on condition根据条件从现有数据框创建新数据框
【发布时间】:2022-01-18 16:46:08
【问题描述】:

我有一个数据框 df

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[0,1,1,0,1,0], [1,0,1,1,0,0], [1,1,0,0,0,1],[1,0,1,0,1,1], 
[0,0,1,0,0,1]]))
df

现在,从数据框 df 我想根据条件创建一个新的数据框 条件:如果一列包含三个或三个以上'1',则新数据框列值为'1',否则为'0'

expected output of new data frame
    1 0 1 0 0 1

【问题讨论】:

    标签: python pandas dataframe numpy


    【解决方案1】:

    您可以执行以下操作:

    import pandas as pd
    import numpy as np
    df = pd.DataFrame(np.array([[0,1,1,0,1,0], [1,0,1,1,0,0], [1,1,0,0,0,1],[1,0,1,0,1,1], 
    [0,0,1,0,0,1]]))
    df_res = pd.DataFrame(df.apply(lambda c: 1 if np.sum(c) > 2 else 0))
    
    In [6]: df_res
    Out[6]: 
       0
    0  1
    1  0
    2  1
    3  0
    4  0
    5  1
    

    你也可以用c.sum()代替np.sum(c)

    如果您想要转置,只需执行以下操作:

    df_res = pd.DataFrame(df.apply(lambda c: 1 if c.sum() > 2 else 0)).T
    

    【讨论】:

      【解决方案2】:

      您也可以不使用apply。您可以沿行 sum axis=0,并使用 gt(2) 创建一个布尔值:

      res = df.sum(axis=0).gt(2).astype(int)
      
      print(res)
      
      0    1
      1    0
      2    1
      3    0
      4    0
      5    1
      dtype: int32
      

      正如大卫指出的那样,上面的结果是series。如果需要数据框,可以在末尾链接to_frame()

      【讨论】:

      • 不错!只是小的修正是respandas.core.series.Series 类型,所以应该将其转换为DataFrame
      • 谢谢!好点子。我现在补充一下。
      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2021-09-08
      • 2021-11-04
      • 2016-10-14
      • 2018-07-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多