Python pandas.DataFrame上的numpy.logical_和.reduce

Python pandas.DataFrame上的numpy.logical_和.reduce,python,pandas,numpy,Python,Pandas,Numpy,这些版本是python==3.6.6、pandas==0.23.0、numpy==1.15.0。我想得到数据帧列表的交集 比如说, x = pd.DataFrame( np.arange(6).reshape((3, 2)), index=["a", "b", "c"], columns=["q", "e"] ) y = x - 1 预期的回报是np.logical_和(x,y)的回报 但是,np.logical_和.reduce([x,y])会引发错误: Value

这些版本是python==3.6.6、pandas==0.23.0、numpy==1.15.0。我想得到数据帧列表的交集

比如说,

x = pd.DataFrame(
    np.arange(6).reshape((3, 2)),
    index=["a", "b", "c"],
    columns=["q", "e"]
)

y = x - 1
预期的回报是np.logical_和(x,y)的回报

但是,np.logical_和.reduce([x,y])会引发错误:

ValueError:无法将大小为3的序列复制到维度为2的数组轴

然后,我试着

x = pd.DataFrame(
    np.arange(4).reshape((2, 2)),
    index=["a", "b"],
    columns=["q", "e"]
)

y = x - 1
np.logical_and.reduce([x, y])
出现另一个错误:

ValueError:基数为10的int()的文本无效:“q”

而不是做:

np.logical_and.reduce([x, y])
做:

输出

[[False False]
 [ True  True]
 [ True  True]]
第一个将操作应用于数据帧(不是numpy数组),第二个将操作应用于数据帧
x的值。值
表示为numpy数组

import pandas as pd
import numpy as np
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 
              'col2': [7, 45, 12, 56, 14],
              'col3': [56, 67, 8, 12, 39],
              'col4': [16, np.nan, 25, 6, 19],
              'col5': [1, 9, 23, 56, np.nan],
              'col6': [13, 3, 53, 72, 88]})
print(df)
df2 = (df%2).replace(1, np.nan)==0
print('\n',df2)
print('\nOdd numbers mean {}'.format([df[col][np.logical_and.reduce([df2[col].values == False])].mean() for col in df.columns]))
print('\nEven numbers mean {}'.format([df[col][np.logical_and.reduce([df2[col].values == True])].mean() for col in df.columns]))
[[False False]
 [ True  True]
 [ True  True]]
import pandas as pd
import numpy as np
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 
              'col2': [7, 45, 12, 56, 14],
              'col3': [56, 67, 8, 12, 39],
              'col4': [16, np.nan, 25, 6, 19],
              'col5': [1, 9, 23, 56, np.nan],
              'col6': [13, 3, 53, 72, 88]})
print(df)
df2 = (df%2).replace(1, np.nan)==0
print('\n',df2)
print('\nOdd numbers mean {}'.format([df[col][np.logical_and.reduce([df2[col].values == False])].mean() for col in df.columns]))
print('\nEven numbers mean {}'.format([df[col][np.logical_and.reduce([df2[col].values == True])].mean() for col in df.columns]))