检查pandas数据帧是否是其他数据帧的子集

时间:2018-03-28 09:31:40

标签: python pandas dataframe

我有两个Python Pandas数据帧A,B,具有相同的列(显然具有不同的数据)。我想检查A是B的子集,也就是说,A的所有行都包含在B中。

知道怎么做吗?

3 个答案:

答案 0 :(得分:7)

默认情况下,方法DataFrame.merge(another_DF)在列的交集处合并(使用来自两个DF的所有具有相同名称的列)并使用how='inner' - 因此我们希望在{{{{}}之后具有相同的行数1}}(如果DF都没有重复):

inner join

如果其中一个DF有重复的行,它将无法正常工作 - 请参阅下面的此类情况

演示:

len(A.merge(B)) == len(A)

对于包含重复项的数据集,我们可以删除重复项并使用相同的方法:

In [128]: A
Out[128]:
   A  B  C
0  1  2  3
1  4  5  6

In [129]: B
Out[129]:
   A  B  C
0  4  5  6
1  1  2  3
2  9  8  7

In [130]: len(A.merge(B)) == len(A)
Out[130]: True

答案 1 :(得分:1)

您也可以尝试:

const circuitBreaker = require('opossum');
import * as request from 'request-promise';

const circuit = circuitBreaker(request.get);

circuit.fallback(() => Promise.resolve({result:[]}));

返回ex = pd.DataFrame({"col1": ["banana", "tomato", "apple"], "col2": ["cat", "dog", "kangoo"], "col3": ["tv", "phone", "ps4"]}) ex2 = ex.iloc[0:2] ex2.isin(ex).all().all()

如果您尝试切换某些值,例如Truetv,则会获得phone

False

答案 2 :(得分:0)

在您没有任何NaN / None值的特殊情况下,您可以将np.in1dnp.stacknp.all结合使用:

df1 = pd.DataFrame(np.arange(16).reshape(4, 4))
df2 = pd.DataFrame(np.arange(40).reshape(10, 4))

res = np.stack([np.in1d(df1.values[i], df2.values) for i in range(df1.shape[0])]).all()
# True

这不会涉及重复,例如df1中的2个相同行可能与df2中的1行匹配。但目前尚不清楚这是否是一个问题。