【问题标题】:Filter column by value inside and get index按内部值过滤列并获取索引
【发布时间】:2016-12-16 10:44:07
【问题描述】:

我想用值大于或等于1 的列填充其他数据框。

df = pd.DataFrame({'A': '0 1 0 0 1 2'.split(),
               'B': '0.1 0.2 0 0.5 0 0.1'.split(),'C':'0.1 0.2 0 0.5 0 0.1'.split()})

   A    B    C
0  0  0.1  0.1
1  1  0.2  0.2
2  0    0    0
3  0  0.5  0.5
4  1    0    0
5  2  0.1  0.1

例如,我会像这样得到df2

df2 = pd.DataFrame({'A': '0 1 0 0 1 2'.split()})

如果我尝试 df2=df2[df2.values.astype(float) >= 1] 我会保留我的三列

【问题讨论】:

    标签: python pandas dataframe filter multiple-columns


    【解决方案1】:

    您可以使用ge 获取值greaterequal,然后按any 过滤,至少一个True 和最后一个boolean indexing 按带有ix 的列:

    print (df.astype(float).ge(1, axis=1))
           A      B      C
    0  False  False  False
    1   True  False  False
    2  False  False  False
    3  False  False  False
    4   True  False  False
    5   True  False  False
    
    print (df.astype(float).ge(1, axis=1).any())
    A     True
    B    False
    C    False
    dtype: bool
    
    #sample data are strings, so first cast to float
    df2 = df.ix[:, df.astype(float).ge(1, axis=1).any()]
    print (df2)
       A
    0  0
    1  1
    2  0
    3  0
    4  1
    5  2
    

    它也适用于:

    df2 = df.ix[:, (df.astype(float) >= 1).any()]
    print (df2)
       A
    0  0
    1  1
    2  0
    3  0
    4  1
    5  2
    

    【讨论】:

    • 直截了当,纯熊猫,非常高效+1
    【解决方案2】:

    我创建了一个布尔掩码,其中列中的至少某个值 >= 1。然后我在数据和列上都使用这个掩码来生成一个新的数据帧。

    我使用 numpy 进行屏蔽。

    # convert to floats and define mask
    v = df.values.astype(float)
    mask = (v >= 1).any(0)
    
    # assign new dataframe with masked data and masked columns
    # just incase there where multiple columns that satisfied.
    df2 = pd.DataFrame(v.T[mask].T, columns=df.columns[mask])
    df2
    


    时间

    df 1000 倍的时间

    df = pd.concat([df.T for _ in range(1000)], ignore_index=True).T
    

    【讨论】:

    • 哇,你的解决方案速度出奇的快,+1
    猜你喜欢
    • 2022-06-20
    • 1970-01-01
    • 2012-08-04
    • 2013-09-19
    • 2021-07-23
    • 2022-10-25
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多