版本为 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'
答案 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]))