Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python中的shift键将列表转换为数据帧_Python_Pandas_Numpy - Fatal编程技术网

使用python中的shift键将列表转换为数据帧

使用python中的shift键将列表转换为数据帧,python,pandas,numpy,Python,Pandas,Numpy,我是新来的。拜托,我想从一个不同基序的氨基酸序列中得到Levenshtein距离。 所以,我得到了一个如下示例所示的列表。我想知道如何在数据帧上排列列表,每“N”行向右移动一列。在这个例子中,N=3,我想改变N的任意值。我正在使用python,谢谢 一种方法是为给定表格的列中的每个字母创建一个存储: n=3 列表1=[1,5,2,3,1,3,1,3,0,0,5,1] 列表2=['A','B','C','D','E','F'] 表=dict() 对于i,枚举中的字母(列表2): 开始=最大值(0,

我是新来的。拜托,我想从一个不同基序的氨基酸序列中得到Levenshtein距离。 所以,我得到了一个如下示例所示的列表。我想知道如何在数据帧上排列列表,每“N”行向右移动一列。在这个例子中,N=3,我想改变N的任意值。我正在使用python,谢谢


一种方法是为给定表格的列中的每个字母创建一个存储:

n=3
列表1=[1,5,2,3,1,3,1,3,0,0,5,1]
列表2=['A','B','C','D','E','F']
表=dict()
对于i,枚举中的字母(列表2):
开始=最大值(0,n*(i-n+1))
结束=最小值(长度(列表1),n*(i+1))
表[字母]=[无]*开始\
+列表1[开始:结束]\
+[无]*(len(列表1)-结束)
打印(表格)
哪个输出

{'A': [1, 5, 2, None, None, None, None, None, None, None, None, None], 'B': [1, 5, 2, 3, 1, 3, None, None, None, None, None, None], 'C': [1, 5, 2, 3, 1, 3, 1, 3, 0, None, None, None], 'D': [None, None, None, 3, 1, 3, 1, 3, 0, 0, 5, 1], 'E': [None, None, None, None, None, None, 1, 3, 0, 0, 5, 1], 'F': [None, None, None, None, None, None, None, None, None, 0, 5, 1]}
使用漂亮的打印,可以重新创建给定的表:

print(“”+“”.join(列表2))
对于范围内的i(len(列表1)):
line=“”
对于列表2中的字母:
s=表[字母][i]
行+=f“{s:2d}”,如果s不是其他行“”
打印(行)
哪张照片

 A B C D E F
 1 1 1
 5 5 5
 2 2 2
   3 3 3
   1 1 1
   3 3 3
     1 1 1
     3 3 3
     0 0 0
       0 0 0
       5 5 5
       1 1 1

如果您需要数据帧,可以在pandas中使用
df.shift(句点=n,轴=1)
。例如

import pandas as pd 
import numpy as np 

n = 3
List1 = ['1', '5', '2', '3', '1', '3', '1', '3', '0', '0', '5', '1']
List2 = ['A', 'B', 'C', 'D', 'E', 'F'] 

df = pd.DataFrame(data = [List1] * n +  [[np.nan] * len(List1)] * n).transpose()
df.columns = List2

for x in range(0, len(List1), n):
    df.loc[x:(x+n-1)] = df.loc[x:(x+n-1)].shift(periods = x // n, axis = 1)

df
将为您提供:

      A    B    C    D    E    F
0     1    1    1  NaN  NaN  NaN
1     5    5    5  NaN  NaN  NaN
2     2    2    2  NaN  NaN  NaN
3   NaN    3    3    3  NaN  NaN
4   NaN    1    1    1  NaN  NaN
5   NaN    3    3    3  NaN  NaN
6   NaN  NaN    1    1    1  NaN
7   NaN  NaN    3    3    3  NaN
8   NaN  NaN    0    0    0  NaN
9   NaN  NaN  NaN    0    0    0
10  NaN  NaN  NaN    5    5    5
11  NaN  NaN  NaN    1    1    1

您想要的输出是什么样子的?你好,Ehsan。我想知道您是否能够在图像中看到我想要的输出,但它应该是一个每N列(本例中为3列)移位的数据帧。像图片一样的东西非常感谢!!!