我一直在研究一个大型基因组学数据集,该数据集包含每个样本的多次读取,以确保我们获得数据,但是在分析它时,我们需要将其降到一行,这样我们就不会扭曲数据(计算基因存在 6 次,而实际上它是一个实例多次读取)。每行都有一个 ID,所以我在 ID 上使用了 pandasdf.groupby()函数。这是一张表来尝试说明我想要做什么:# ID | functionality | v_region_score | constant_region # -----------------------------------------------------------------# 123 | productive | 820 | NaN# | unknown | 720 | NaN# | unknown | 720 | IgM# 456 | unknown | 690 | NaN# | unknown | 670 | NaN# 789 | productive | 780 | IgM# | productive | 780 | NaN(编辑)这是示例数据框的代码:df1 = pd.DataFrame([ [789, "productive", 780, "IgM"], [123, "unknown", 720, np.nan], [123, "unknown", 720, "IgM"], [789, "productive", 780, np.nan], [123, "productive", 820, np.nan], [456, "unknown", 690, np.nan], [456, "unknown", 670, np.nan]], columns=["ID", "functionality", "v_region_score", "constant_region"])这将是选择正确行的最终输出:df2 = pd.DataFrame([ [789, "productive", 780, "IgM"], [123, "productive", 820, np.nan], [456, "unknown", 690, np.nan]], columns=["ID", "functionality", "v_region_score", "constant_region"])因此,分组后,对于每个组,如果它在功能上具有“生产性”值,我想保留该行,如果它是“未知”,我将采用最高的 v_region_score,如果有多个“生产性”值,我会采用一个在它的 constant_region 中有一些价值。我尝试了几种访问这些值的方法:id, frame = next(iter(df_grouped))if frame["functionality"].equals("productive"): # do something只看一组:x = df_grouped.get_group("1:1101:10897:22442")for index, value in x["functionality"].items(): print(value)# returns the correct value and type "str"甚至将每个组放入列表中:new_groups = []for id, frame in df_grouped: new_groups.append(frame)# access a specific index returns a dataframenew_groups[30]我得到的所有这些错误是“系列的真值不明确”,我现在明白为什么这不起作用,但我不能使用a.any(), a.all(), 或者a.bool()因为条件有多复杂。有什么方法可以根据每个组的列值选择每个组中的特定行吗?对不起,这么复杂的问题,提前谢谢!:)
查看完整描述