我需要合并相似的列并删除重复项(具有相同日期的条目)。数据帧:
Albumin C-reactive protein CRP Ferritin Haemoglobin Hb Iron Nancy Index Plasma Platelets Transferrin saturation % Transferrin saturations UCEIS (0 to 8) WCC White Cell Count test_date
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 12.35 2016-04-17 23:00:00
1 NaN NaN NaN NaN 133.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2016-04-17 23:00:00
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN 406.0 NaN NaN NaN NaN NaN 2016-04-17 23:00:00
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN 406.0 NaN NaN NaN NaN NaN 2016-04-17 23:00:00
4 NaN 32.2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2016-04-17 23:00:00
5 36.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2016-04-17 23:00:00
6 NaN NaN NaN 99.7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2016-04-17 23:00:00
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 25.0 NaN NaN NaN NaN 2016-04-17 23:00:00
12 36.0 NaN 32.2 99.7 NaN 133.0 NaN NaN NaN 406.0 NaN 25.0 NaN 12.35 NaN 2016-04-17 23:00:00
14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 7.0 NaN NaN 2016-04-25 23:00:00
79 34.0 NaN 5.4 55.9 NaN 133.0 NaN NaN NaN 372.0 NaN 28.0 NaN 7.99 NaN 2016-06-12 23:00:00
我需要得到:
^{pr2}$因此,“C反应蛋白”列应与“CRP”列合并,“血红蛋白”列应与“Hb”列合并,“转铁蛋白饱和度%”列应与“转铁蛋白饱和度”列合并。在
我可以很容易地用删除重复项。drop\u duplicates(),但诀窍是不仅删除具有相同日期的行,而且还要确保同一列中的值是重复的。例如,“4”行的“C反应蛋白”与“12”行中的“CRP”值相同,此外,它们的输入日期相同。鉴于此,我只需要具有值为32.2和日期为“2016-04-17”的“CRP”列(加上其他唯一列)。在
编辑
有些条目实际上是重复的(由于系统故障,完全相同),例如(最后三行,2016-06-20,索引‘803’和‘122’)。下面的解决方案是否能够删除这些相同的行?在
请注意,感谢您为重复但不完全相同的条目提供了惊人的通用解决方案。在
Albumin C-reactive protein CRP Ferritin Haemoglobin Hb Iron Nancy Index Plasma Platelets Transferrin saturation % Transferrin saturations UCEIS (0 to 8) WCC White Cell Count setName test_date
735 39.0 NaN 0.4 52.0 NaN 144.0 NaN NaN NaN 197.0 NaN 25.0 NaN 4.88 NaN Bloods 2016-05-31 23:00:00
803 40.0 NaN 0.2 81.0 NaN 147.0 NaN NaN NaN 234.0 NaN 35.0 NaN 8.47 NaN Bloods 2016-06-20 23:00:00
347 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN Research Bloods 2016-06-20 23:00:00
122 40.0 NaN 0.2 81.9 NaN 147.0 NaN NaN NaN 234.0 NaN 35.0 NaN 8.47 NaN Bloods 2016-06-20 23:00:00
耶斯雷尔说的是,如果你有一种情况:
然后他的方法会删除8.0的读数,只保留32个读数(这是因为他分两个步骤(或3个步骤?),在这一行:
^{pr2}$df = df.groupby('test_date').max().rename(columns=d).groupby(axis=1, level=0).max()
对于我截短的例子来说:
然后重命名
.rename(columns=d)
,给出:然后
.groupby(axis=1, level=0).max()
按行分组(而不是向下的列),这将给出:这是丢失数据的最高风险所在。在
替代方案
我会先把原始数据分成两个帧
但只有在同一天同一测试有多个不重复的条目时,才需要这样做。在
我想您需要^{} 和
rename
列的dict
:更一般的解决方案是通过^{} 重塑形状,删除重复项,然后创建
^{pr2}$DataFrame
回来:相关问题 更多 >
编程相关推荐