Pandas.DataFrame上的numpy.logical_and.reduce

时间:2018-08-19 13:24:41

标签: python pandas numpy

版本为 python == 3.6.6 pandas == 0.23.0 numpy == 1.15.0 。我想得到一个DataFrames列表的交集。

例如,

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

y = x - 1

预期回报是 np.logical_and(x,y)返回的结果

       q      w
a  False  False
b   True   True
c   True   True

但是, np.logical_and.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'

2 个答案:

答案 0 :(得分:0)

代替:

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

这样做:

np.logical_and.reduce([x.values, y.values])

输出

[[False False]
 [ True  True]
 [ True  True]]

第一个将操作应用于DataFrame(而不是numpy数组),第二个将操作应用于Datanum x.values的值(表示为numpy数组)

答案 1 :(得分:0)

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]))