【问题标题】:Boolean comparaison between a series and a dataframe (element-wise)系列和数据框之间的布尔比较(按元素)
【发布时间】:2022-10-13 21:06:55
【问题描述】:

这里要按元素比较的系列和数据框(AND条件):

import pandas as pd

se = pd.Series(data=[False, True])

df = pd.DataFrame(data=[[True, False], [True, True]],
                  columns=['A','B'])

期望的结果:

df2 = pd.DataFrame(data=[[False, False], [True, True]],
                  columns=['A','B'])

我可以使用慢速 for 循环来实现这一点,但我确信有一种方法可以对其进行矢量化。

非常感谢 !

【问题讨论】:

    标签: pandas series


    【解决方案1】:

    Series 转换为 numpy 数组并与广播进行比较:

    print (df & se.to_numpy()[:,None])
           A      B
    0  False  False
    1   True   True
    

    【讨论】:

    • 两个有效答案!你能告诉我 [:,None] 部分是做什么的吗?
    【解决方案2】:

    您可以使用转换为numpy 数组来受益于广播:

    out = np.logical_and(df, se.to_numpy()[:,None])
    

    输出:

           A      B
    0  False  False
    1   True   True
    

    中间的:

    se.to_numpy()[:,None]
    
    array([[False],
           [ True]])
    

    【讨论】:

    • 两个有效答案!你能告诉我 [:,None] 部分是做什么的吗?
    • 这会将一维向量(n 项)转换为具有 1 列和 n 行的二维数组
    【解决方案3】:

    另一种可能的解决方案:

    (df & np.vstack(se))
    

    输出:

           A      B
    0  False  False
    1   True   True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-28
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多