我只是想捕获主题名称(列名)作为值在新列,在重新评估后学生分数有一些改进。
我有重新评估前的数据集:
| 姓名|类|考试|数学|物理学|化学|加入日期|结果|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 约翰|十年级|模型1|九十八|七十八|三十五|2000-01-15|失败|
| 鲍勃|06级|期中考试|六十五|五十二|九十二|2001-08-16|传球|
| 玫瑰|06级|模型2|九十一|七十|五十四个|2001-09-14|传球|
| 迈克尔|07级|模型1|十个|九十|四十五|2010-01-10 2010-01-10|失败|
现在我有了重新评估后的数据集,一些学生的分数有了一些改善,最近参加考试的其他学生的分数也有了新的数据,
| 姓名|类|考试|数学|物理学|化学|加入日期|结果|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 约翰|十年级|模型1|九十八|七十八|*八十七 | 2000-01-15|通过|
| 鲍勃|06级|期中考试|六十五|91号|九十二|2001-08-16|传球|
| 玫瑰|06级|模型2|九十一|七十|五十四个|2001-09-14|传球|
| 迈克尔|07级|模型1|一百| 九十|四十五|2001-01-10|通过|
| 山姆|08级|期中考试|四十三|六十二|八十|2000-08-10|传球|
| 詹姆斯|十年级|模型|七十六|六十六|九十六|2000-09-07|传球|
| 亨利|09级|模型1|三十四|九十一|七十|2000-01-04|失败|
现在,我们需要将这两个数据集合并,并标记哪一行被更新,哪一列被更新,所以,合并的数据集看起来像这样,
| 姓名|类|考试|数学|物理学|化学|加入日期|结果|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 约翰|十年级|模型1|九十八|七十八|三十五|2000-01-15|失败|
| 鲍勃|06级|期中考试|六十五|五十二|九十二|2001-08-16|传球|
| 玫瑰|06级|模型2|九十一|七十|五十四个|2001-09-14|传球|
| 迈克尔|07级|模型1|十个|九十|四十五|2010-01-10 2010-01-10|失败|
| 约翰|十年级|模型1|九十八|七十八|*八十七 | 2000-01-15|通过|
| 鲍勃|06级|期中考试|六十五|91号|九十二|2001-08-16|传球|
| 玫瑰|06级|模型2|九十一|七十|五十四个|2001-09-14|传球|
| 迈克尔|07级|模型1|一百| 九十|四十五|2001-01-10|通过|
| 山姆|08级|期中考试|四十三|六十二|八十|2000-08-10|传球|
| 詹姆斯|十年级|模型|七十六|六十六|九十六|2000-09-07|传球|
| 亨利|09级|模型1|三十四|九十一|七十|2000-01-04|失败|
现在,最终的输出应该是这样的,有2个新列,我能够消除重复并添加新列任何改进,但我在添加另一个新列改进的主题时卡住了
预期输出:
| 姓名|类|考试|数学|物理学|化学|任何改进|改良场|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 约翰|十年级|模型1|九十八|七十八|**八十七 *| 是的|化学、结果|
| 鲍勃|06级|期中考试|六十五|91号|九十二|是的|物理学|
| 玫瑰|06级|模型2|九十一|七十|五十四个|没有|无改善|
| 迈克尔|07级|模型1|一百| 九十|四十五|是的|数学,结果,加入日期|
| 山姆|08级|期中考试|四十三|六十二|八十|新条目|新条目|
| 詹姆斯|十年级|模型|七十六|六十六|九十六|新条目|新条目|
| 亨利|09级|模型1|三十四|九十一|七十|新条目|新条目|
下面是代码,我用的,
added primary key column by concatenating name, class, exam and secondary key column by concatenating maths,physics,chemistry.
dupedf = concatdf.loc[concatdf.duplicated(subset=['PrimaryKey', 'SecondaryKey'],keep=False)]
dupedf1 = concatdf.loc[concatdf.duplicated(subset=['PrimaryKey'],keep=False)]
for i,j in dupedf.iterrows():
for k,l in dupedf1.iterrows():
if l['PrimaryKey'] == j['PrimaryKey']:
dupedf = dupedf.drop_duplicates(subset=['PrimaryKey','SecondaryKey'],keep='last')
dupedf['any improvement'] = 'No'
# dupedf['improved subject'] = ' '
else:
dupedf1 = dupedf1.drop_duplicates(subset=['SecondaryKey'],keep=False)
dupedf1 = dupedf1.drop_duplicates(subset=['PrimaryKey'],keep='last')
dupedf1['any improvement'] = 'Yes'
# dupedf1['improved subject'] = 'column name'
在上面的代码中,我只迭代了在重新评估数据集前后存在的行。逐行迭代以填充2个新列**anyimprovement & improvedfield。*我能够实现任何improvement列,但我需要improvedfield列的帮助。
1条答案
按热度按时间bzzcjhmw1#
你不应该在
iterrows
中使用循环,而应该尝试使用向量代码。假设
df1
和df2
为两个输入:输出: