python - 匹配 DataFrame 列中的字符串

标签 python r dataframe string-matching

我有如下测试数据框(原始文件为 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/

相关文章:

python - 如何使用 python gspread 调试持久性 'SpreadsheetNotFound' 错误

r - 在 R 中的两个数据框中使用多行过滤

python - 在 groupby 和操作子数据帧之后保持其他列值不变

python - Flask JWT 在每个请求上扩展 token 的有效性

python - 如何将列表的索引与 float 进行比较?

r - 正确的编码方式——避免 for 循环

r - 警告消息行号R

python - 比较两个 Python Pandas 数据帧的 2 列并获取公共(public)行

python - 合并数据框的两列,然后进行比较

用于创建 dict of dict of list 的 Python 习惯用法