Python 基于多列信息的数据帧条件转换、聚合/分组
假设我的数据框如下所示Python 基于多列信息的数据帧条件转换、聚合/分组,python,pandas,group-by,aggregate,aggregate-functions,Python,Pandas,Group By,Aggregate,Aggregate Functions,假设我的数据框如下所示 df.head() col1 col2 col3 start end gs chr1 HAS GEN 11869 14409 DDX chr1 HAS TRANS 11869 14409 Tp1 chr1 HAS EX 11869 12227 Tp2 chr1 HAS EX 12613 12721 Tp3 chr1 HAS EX 13221 14409 Tp4 我想将上
df.head()
col1 col2 col3 start end gs
chr1 HAS GEN 11869 14409 DDX
chr1 HAS TRANS 11869 14409 Tp1
chr1 HAS EX 11869 12227 Tp2
chr1 HAS EX 12613 12721 Tp3
chr1 HAS EX 13221 14409 Tp4
我想将上面的数据框或组按上面的数据框转换为
df_converted.head()
gs chr strt end ex_start ex_end
DDX chr1 11869 14409 11869, 12613,13221 12227,12721,14409
根据列col3
、start
和end
信息,转换后的数据帧应具有两个附加列ex\u start
和ex\u end
。因此,如果col3
等于EX
,则生成EX\u start
和EX\u end
列。但是,保留列gs
的第一个值
我试着制作列表并将它们连接在一起,但是,我没有完成这项工作,以下是我所做的尝试
df.query('col3 == "EX"').groupby('gs').agg({'start': list})
gs start
NA [11869, 12613,13221]
然而,这上面的一行程序正在生成带有列表列的数据帧
在gs
中使用NA
。不是第一个值
逻辑:
col3
等于EX
,则生成EX\u start
并使用start
中的值作为逗号分隔的列表
col3
等于EX
,则生成第二个EX\u end
并使用end
中的值作为逗号分隔的列表gs
列的第一个值感谢您的帮助 好,以下代码将:
- 当
列有值时,启动一个新组gs
- 将
和开始
列的值连接到结束
列中具有col3
的每个组长后面的行,以构建新列'EX'
gs chr start end ex_start ex_end
0 DDX HAS 11869 14409 11869,12613,13221 12227,12721,14409
好的,下面的代码将:
- 当
列有值时,启动一个新组gs
- 将
和开始
列的值连接到结束
列中具有col3
的每个组长后面的行,以构建新列'EX'
gs chr start end ex_start ex_end
0 DDX HAS 11869 14409 11869,12613,13221 12227,12721,14409
分组逻辑是什么?
col1
和col2
的值相同吗?在每行上使用非NaN gs启动一个新组?还是另一种逻辑?逻辑1。如果col3
是EX
和逻辑2。在我当前的示例中,gs
列有'ID',它是DDX
,其余的是NA
,因此我们需要按gs
列分组。如果条件满足,则始终在新列中使用列start
中的值作为逗号分隔的列表,对于列end
中的列end
我不确定什么最适合我的情况如果col3
不是ex
?在这种情况下,应该如何构建ex\u start
和ex\u end
?如果col3不是ex
,它将不会影响ex\u start
列,因为它是逗号分隔值的列表。列表应始终使用下一个值写入。分组逻辑是什么?col1
和col2
的值相同吗?在每行上使用非NaN gs启动一个新组?还是另一种逻辑?逻辑1。如果col3
是EX
和逻辑2。在我当前的示例中,gs
列有'ID',它是DDX
,其余的是NA
,因此我们需要按gs
列分组。如果条件满足,则始终在新列中使用列start
中的值作为逗号分隔的列表,对于列end
中的列end
我不确定什么最适合我的情况如果col3
不是ex
?在这种情况下,应该如何构建ex\u start
和ex\u end
?如果col3不是ex
,它将不会影响ex\u start
列,因为它是逗号分隔值的列表。列表中应始终包含下一个值。感谢您的解决方案。对不起,我的问题不清楚。我主要问题中的NAs
是不需要的字符串。我现在用真正的字符串替换它们。他们不是NA
s。很抱歉。因此seound行无法正确生成ix
列。感谢您的解决方案。对不起,我的问题不清楚。我主要问题中的NAs
是不需要的字符串。我现在用真正的字符串替换它们。他们不是NA
s。很抱歉。因此seound行没有正确地生成ix
列。