我想根据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?)非常相似,不同之处在于,我想过滤行,并且不输出行索引,但要有额外的条件。
非常感谢!
答案 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