我有两个Python Pandas数据帧A,B,具有相同的列(显然具有不同的数据)。我想检查A是B的子集,也就是说,A的所有行都包含在B中。
知道怎么做吗?
答案 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()
如果您尝试切换某些值,例如True
和tv
,则会获得phone
值
False
答案 2 :(得分:0)
在您没有任何NaN
/ None
值的特殊情况下,您可以将np.in1d
与np.stack
和np.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行匹配。但目前尚不清楚这是否是一个问题。