How to transpose data in pandas Dataframe by reading one row at a time?(如何通过一次读取一行的方式在 pandas Dataframe中调换数据?)
                            本文介绍了如何通过一次读取一行的方式在 pandas Dataframe中调换数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
在 pandas 数据框中:
contig  haplotype_block hap_X   hap_Y   odds_ratio  My_hap  Sp_hap
2         726           C-G-C   T-C-T    0.012      C-G-C    T-C-T
2         1094          G-C     A-T      0.02       A-T      G-C
2         1335          C-T-T   A-C-A    0.001      A-C-A    C-T-T
2         3353          T-T     A-C      314.5      T-T      A-C
我想要调换数据。简单的转置就可以了,但这有点复杂。
- 我不需要移动列索引。
 - 基本上行数会增加。
 
我想要做的就是读取每一行(行),然后首先转置该行。
contig  haplotype_block hap_X   hap_Y   odds_ratio  My_hap  Sp_hap
2         726           C       T        0.012      C         T
2         726           G       C         -         G         C
2         726           C       T         -         C         T
2         1094          G       A        0.02       A         G
2         1094          C       T         -         T         C
现在,转置第三行并沿行添加到上面的数据帧中。
我可以使用for-loop(一次读取每一行)来完成这项工作,但我正在专门寻找使用PANDA数据帧的解决方案,因此内存占用以及代码理解都是清晰而优雅的。
谢谢,
推荐答案
您可以使用:
from  itertools import chain
#create list by split
cols = ['hap_X','hap_Y','My_hap','Sp_hap']
df[cols] = df[cols].apply(lambda x: x.str.split('-'))
#new df with flatening lists and repeating
lens = df.hap_X.str.len()
df2 = pd.DataFrame({
        "contig": np.repeat(df.contig.values, lens),
        "haplotype_block": np.repeat(df.haplotype_block.values, lens),
        "hap_X": list(chain.from_iterable(df.hap_X)),
        "hap_Y": list(chain.from_iterable(df.hap_Y)),
        "odds_ratio": np.repeat(df.odds_ratio.values, lens),
        "My_hap": list(chain.from_iterable(df.My_hap)),
        "Sp_hap": list(chain.from_iterable(df.Sp_hap))
}).reindex_axis(df.columns, axis=1)
#correct column odds_ratio - only first value
s = pd.Series(np.repeat(df.index.values, lens))
df2.loc[s.duplicated(), 'odds_ratio'] = '-'
print (df2)
   contig  haplotype_block hap_X hap_Y odds_ratio My_hap Sp_hap
0       2              726     C     T      0.012      C      T
1       2              726     G     C          -      G      C
2       2              726     C     T          -      C      T
3       2             1094     G     A       0.02      A      G
4       2             1094     C     T          -      T      C
5       2             1335     C     A      0.001      A      C
6       2             1335     T     C          -      C      T
7       2             1335     T     A          -      A      T
8       2             3353     T     A      314.5      T      A
9       2             3353     T     C          -      T      C
                        这篇关于如何通过一次读取一行的方式在 pandas Dataframe中调换数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:如何通过一次读取一行的方式在 pandas Dataframe中调换数据?
				
        
 
            
        基础教程推荐
             猜你喜欢
        
	     - 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
 - 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
 - PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
 - PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
 - 修改列表中的数据帧不起作用 2022-01-01
 - 包装空间模型 2022-01-01
 - Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
 - 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
 - 求两个直方图的卷积 2022-01-01
 - 在Python中从Azure BLOB存储中读取文件 2022-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
				
				
				
				