python - 两个长度不等的数据帧的交集
问题描述
如果行匹配,我正在尝试获取“游戏”和“样本”数据帧之间的交集。数据框的大小不等,我不希望将一行计算两次以进行交集。
例如,样本数据框有行[0,1,1],[1,1,0],[1,0,1],[0,1,1]
并且游戏数据框有 rows [1,1,0],[1,1,0],[1,0,1],[1,1,1],[1,0,1]
。
现在交叉数据框应该有 rows [1,1,0],[1,0,1]
。
import pandas as pd
import numpy as np
import random
trials = 1000
games = 3
data = pd.DataFrame()
for i in range(trials):
for j in range(games):
data.loc[i,j] = random.choice([0,1])
sample = pd.DataFrame()
for i in range(trials):
for j in range(games):
if ((data.loc[i,:]).sum()) >= 2:
sample.loc[i,j] = data.loc[i,j]
game = pd.DataFrame()
for i in range(trials):
for j in range(games):
if (data.loc[i,0]) == 1:
game.loc[i,j] = data.loc[i,j]
intersection = pd.DataFrame()
for i in range(len(sample)):
if np.all(sample.iloc[i,:] == game.iloc[i,:]):
for j in range(games):
intersection.loc[i,j] = sample.loc[i,j]
解决方案
您可以尝试使用 pandas pd.DataFrame.isin条件检查第二个数据框中的相似行
df1 = pd.DataFrame([[0,1,1],[1,1,0],[1,0,1],[0,1,1]])
df2 = pd.DataFrame([[1,1,0],[1,1,0],[1,0,1],[1,1,1],[1,0,1]])
df1[df1.isin(df2).all(1)]
出去:
0 1 2
1 1 1 0
2 1 0 1
推荐阅读
- python - 如何通过python做3维数组的累积和?(用于 3 维循环)
- python - 我怎样才能用 np.cumsum 写出这个滚动平均值
- odoo-14 - 在 odoo 14 销售点购买
- php - 在 laravel 中保存/更新一对多关系
- powerbi - 需要历史数据 + 刷新数据 (Power BI)
- php - 如何在laravel视图中通过'created_at'显示最后一个属性顺序
- c# - GetRequiredService 返回 null
- android - 如何使用 su 在 Android 中重新安装应用程序本身
- laravel - 为什么我在 laravel 8 日志中出现错误,但在浏览器中却没有
- apache-spark - 如果 kafka 流不存在,则停止 spark readstream 失败