我有如下测试数据框(原始文件为 60 x 350)
Speci 45 46 47 48 49 50 51
PP A T A - G G A
JJ G T A - T A G
KK A T - A G - A
LL A C A A G G A
MM G C A A G G G
NN C - G T C C T
基本上我想做的是传递一个输入字符串和列名/列号,如下所示
input string: CAAGGA
ColF (Column from): 46
ColT ( Column To ): 51
并精确匹配每个对应的指定列(From to )并按降序输出最佳匹配如下
Species Matchs
LL 6
MM 5
PP 4
我仅将 R/Python 语言用于 ggplots 和基本文件处理,不确定如何遍历数据帧和匹配。
最佳答案
my_str <- function(df){
nm <- names(df)
# READ THE DATA IN
string <- unlist(strsplit(readline("string: "),""))
ColF <- grep(readline("ColF (Column from): "), nm)
ColT <- grep(readline("ColT ( Column To ): "), nm)
# COMPUTE THE MATCHES
A <- colSums(t(df[ColF:ColT]) == string)
B <- sort(setNames(A,df[,"Speci"]),decreasing = T)
data.frame(Speci = names(B),Matches = B,row.names = NULL)
}
现在运行 my_str(data)
,其中 data 是您指定的数据帧
my_str(a)
string: CAAGGA
ColF (Column from): 46
ColT ( Column To ): 51
Speci Matches
1 LL 6
2 MM 5
3 PP 4
4 KK 3
5 JJ 1
6 NN 0
在 python 中:
def my_str(df):
string = pd.np.array(list(input("string: ")))
ColF = input("ColF (Column from): ")
ColT = input("ColT (Column to): ")
A = (df.loc[:,ColF:ColT]==string[None,:]).sum(1).sort_values(ascending = False)
return pd.DataFrame({'Speci': df['Speci'][A.index],'Matches' : A})
现在运行 my_str(data)
,其中 data 是您指定的数据帧
my_str(df)
string: CAAGGA
ColF (Column from): 46
ColT (Column to): 51
Out[77]:
Speci Matches
3 LL 6
4 MM 5
0 PP 4
2 KK 3
1 JJ 1
5 NN 0
关于python - 匹配 DataFrame 列中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58688454/