Python数据框熊猫-通过条件issubset()对列值过滤数据框行

时间:2020-07-20 12:11:15

标签: python pandas dataframe

我想根据criteria_a列中列表的所有项是否都存在于criteria_b列中来筛选数据框行,以获取df = pd.DataFrame({'criteria_a': [1, 2, 3, 4, 1, 1, 2, 3, 4], 'criteria_b': [2, 2, 2, 3, 7, 9, 9, 9, 9], 'value': [0.2, 0.6, 0.1, 0.9, 0.8, 0.7, 0.3, 0.8, 0.1]}) print(df) criteria_a criteria_b value 0 1 2 0.2 1 2 2 0.6 2 3 2 0.1 3 4 3 0.9 4 1 7 0.8 5 1 9 0.7 6 2 9 0.3 7 3 9 0.8 8 4 9 0.1 列中的固定值。

例如,让我们考虑以下数据框:

criteria_a

list_criteria_a = [1, 2, 3, 4]列的可能值为list_criteria_a

我想创建一个新的数据框,该框仅提取在给定的criteria_b值下列表 criteria_a criteria_b value 0 1 9 0.7 1 2 9 0.3 2 3 9 0.8 3 4 9 0.1 中所有项均存在的行。

以上示例的结果仅是最后四行:

issubset()

我知道我们将不得不使用DOCKER_BUILDKIT=1,但我不知道如何使用。 它与帖子(How do I get the index of a row in pandas if the row contains ALL items in a list?)非常相似,不同之处在于,我想过滤行,并且不输出行索引,但要有额外的条件。

非常感谢!

1 个答案:

答案 0 :(得分:2)

对于每个组的比较值最好在此使用GroupBy.transform,并将其自定义函数用于通过private void btnImport_Click(object sender, EventArgs e) { var openFileExcel = new OpenFileDialog() { Filter = "Excel Files | *.xlsx; *.xls; *.xlsm", Title = "Select an Excel File", CheckFileExists = true }; if (openFileExcel.ShowDialog() == DialogResult.Cancel) return; DatabaseObjects.FileName = openFileExcel.FileName; using(OleDbConnection conn = new OleDbConnection(DatabaseObjects.ConnectionString), connExcel = new OleDbConnection(DatabaseObjects.ConnectionStringExcel)) { string query = "INSERT INTO Students (RollNo, SName, FName, ClassID) VALUES(@RollNo, @SName, @FName, @ClassID)"; string queryExcel = "SELECT * FROM [Seven$]"; using (OleDbCommand command = new OleDbCommand(query, conn), commandExcel = new OleDbCommand(queryExcel,connExcel)) { OleDbParameter param1 = new OleDbParameter("RollNo", OleDbType.Numeric); command.Parameters.Add(param1); OleDbParameter param2 = new OleDbParameter("SName", OleDbType.VarChar); command.Parameters.Add(param2); OleDbParameter param3 = new OleDbParameter("FName", OleDbType.VarChar); command.Parameters.Add(param3); OleDbParameter param4 = new OleDbParameter("ClassID", OleDbType.Numeric); command.Parameters.Add(param4); conn.Open(); connExcel.Open(); OleDbDataReader drExcel = commandExcel.ExecuteReader(); while(drExcel.Read()) { param1.Value = Convert.ToInt32(drExcel[0]); param2.Value = drExcel[1].ToString(); param3.Value = drExcel[2].ToString(); param4.Value = Convert.ToInt32(drExcel[4]); command.ExecuteNonQuery(); } } } } 方法设置的比较,输出为布尔系列,因此可能通过boolean indexing进行过滤:

issubset