如何使用C# DataTable生成n*2行的含True/False选项表格
实现方法:将每行问题拆分为True/False选项行
嘿,我来帮你搞定这个需求!你需要把原始DataTable里的每个问题拆成两行——分别对应True和False选项,同时保留哪个选项是正确的标记对吧?下面我用两种常用的技术栈来实现,你可以根据自己的场景选择。
方法1:Python + Pandas(推荐用于数据分析场景)
Pandas是处理表格数据的利器,用它可以快速实现这个需求,有两种简洁的写法:
写法A:遍历构造行(直观易懂)
import pandas as pd # 第一步:定义原始DataTable original_df = pd.DataFrame({ 'question_text': ['Question 1', 'Question 2', 'Question 3'], 'right_option': [True, False, True] }) # 第二步:生成扩展后的行列表 expanded_rows = [] for _, row in original_df.iterrows(): # 添加True选项行,标记是否为正确答案 expanded_rows.append({ 'question_text': row['question_text'], 'option': True, 'is_correct': row['right_option'] == True }) # 添加False选项行,标记是否为正确答案 expanded_rows.append({ 'question_text': row['question_text'], 'option': False, 'is_correct': row['right_option'] == False }) # 第三步:转换为新的DataFrame new_df = pd.DataFrame(expanded_rows) # 查看结果 print(new_df)
运行后输出的新表格:
question_text option is_correct 0 Question 1 True True 1 Question 1 False False 2 Question 2 True False 3 Question 2 False True 4 Question 3 True True 5 Question 3 False False
写法B:交叉合并(更高效,适合大数据量)
用Pandas的cross合并方法,一行完成扩展,代码更简洁:
import pandas as pd original_df = pd.DataFrame({ 'question_text': ['Question 1', 'Question 2', 'Question 3'], 'right_option': [True, False, True] }) # 创建包含True/False的选项表 options = pd.DataFrame({'option': [True, False]}) # 交叉合并原始表和选项表,自动生成每个问题的两个选项行 new_df = original_df.merge(options, how='cross') # 添加是否正确的标记列 new_df['is_correct'] = new_df['right_option'] == new_df['option'] # 可选:删除原有的right_option列(如果不需要保留) new_df = new_df.drop('right_option', axis=1)
方法2:C# DataTable(适合.NET场景)
如果是在.NET环境中使用DataTable,可以通过遍历原始行来构造新表:
// 假设原始DataTable已初始化,包含"question_text"和"right_option"列 DataTable originalTable = new DataTable(); originalTable.Columns.Add("question_text", typeof(string)); originalTable.Columns.Add("right_option", typeof(bool)); // 填充原始数据(示例) originalTable.Rows.Add("Question 1", true); originalTable.Rows.Add("Question 2", false); originalTable.Rows.Add("Question 3", true); // 创建新的DataTable,定义列 DataTable newTable = new DataTable(); newTable.Columns.Add("question_text", typeof(string)); newTable.Columns.Add("option", typeof(bool)); newTable.Columns.Add("is_correct", typeof(bool)); // 遍历原始行,生成两行新数据 foreach (DataRow row in originalTable.Rows) { string question = row["question_text"].ToString(); bool rightOption = (bool)row["right_option"]; // 添加True选项行 DataRow trueRow = newTable.NewRow(); trueRow["question_text"] = question; trueRow["option"] = true; trueRow["is_correct"] = rightOption == true; newTable.Rows.Add(trueRow); // 添加False选项行 DataRow falseRow = newTable.NewRow(); falseRow["question_text"] = question; falseRow["option"] = false; falseRow["is_correct"] = rightOption == false; newTable.Rows.Add(falseRow); }
这样新的newTable就包含了n*2行数据,每个问题对应True和False两个选项行,同时标记了正确选项。
内容的提问来源于stack exchange,提问作者Babai
相关产品推荐
相关产品推荐

