包含以下数据帧:
import pandas as pd
df=pd.DataFrame(data=[[1,5179530,'rs10799170',8.1548,'E001'], [1,5179530,'rs10799170',8.1548,'E002'], [1,5179530,'rs10799170',8.1548,'E003'], [1,455521,'rs235884',2.584,'E003'], [1,455521,'rs235884',2.584,'E007']], col umns=['CHR','BP','SNP','CM','ANNOT'])
CHR BP SNP CM ANNOT
0 1 5179530 rs10799170 8.1548 E001
1 1 5179530 rs10799170 8.1548 E002
2 1 5179530 rs10799170 8.1548 E003
3 1 455521 rs235884 2.5840 E003
4 1 455521 rs235884 2.5840 E007
我想得到
^{pr2}$我分别尝试了groupby()
和{
df.groupby(['CHR','BP','SNP','CM']).sum()
CHR BP SNP CM ANNOT
1 455521 rs235884 2.5840 E003E007
5179530 rs10799170 8.1548 E001E002E003
pd.get_dummies(df['ANNOT'])
E001 E002 E003 E007
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 1 0
4 0 0 0 1
但我不知道如何将两者结合起来,或者是否有其他方法。在
正如@Dadep在他们的评论中指出的,这可以通过pivot表来实现。如果你想坚持你的
get_dummies
+groupby
技巧,尽管你可以做一些类似的事情:它首先连接数据帧和
^{pr2}$get_dummies
调用的输出,然后根据相关列对结果进行分组,在这些组中取这些列的总和,然后重置索引,这样就不必处理多索引数据帧。结果如下:你很亲密!只需将这两种技术结合起来:
或者根据您的应用程序,您可能希望使用}。请注意,我更改了groupby中的顺序,以防止出现一个CHR组。只需按您想要的顺序获得结果:
^{pr2}$.max
而不是{这里有一种方法,使用
groupby
和apply
相关问题 更多 >
编程相关推荐